查詢提升元件
查詢提升元件可讓您設定指定查詢的頂端結果,而不用管一般的 Lucene 評分。
這有時稱為「贊助搜尋」、「編輯式加強」或「最佳選擇」。這個元件會將使用者查詢文字與已設定的頂端結果對應比對。文字可以是任何字串或非字串 ID,只要已建立索引即可。雖然此元件可搭配任何 QueryParser 使用,但最適合搭配 DisMax 查詢剖析器或擴展 DisMax (eDisMax) 查詢剖析器使用。
查詢提升元件也支援分散式搜尋。
本節中使用的所有範例設定和查詢都假設您正在執行 Solr 的「techproducts」範例
bin/solr start -e techproducts
設定查詢提升元件
您可以在 solrconfig.xml
檔案中設定查詢提升元件。搜尋元件 (例如 QueryElevationComponent
) 可以新增至任何請求處理常式;這裡為了簡潔起見,使用專用的請求處理常式。
<searchComponent name="elevator" class="solr.QueryElevationComponent" >
<!-- pick a fieldType to analyze queries -->
<str name="queryFieldType">string</str>
<str name="config-file">elevate.xml</str>
</searchComponent>
<requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="echoParams">explicit</str>
</lst>
<arr name="last-components">
<str>elevator</str>
</arr>
</requestHandler>
或者,在查詢提升元件設定中,您也可以指定以下內容,以區分編輯結果和「正常」結果
<str name="editorialMarkerFieldName">foo</str>
查詢提升搜尋元件採用以下參數
queryFieldType
-
必要
預設值:無
指定應該使用哪個欄位類型來分析傳入的文字。例如,使用具有
LowerCaseFilter
的欄位類型可能很合適。另一個範例是,如果您需要取消跳脫反斜線跳脫的查詢,您可以定義欄位類型以使用
PatternReplaceCharFilter
進行預處理。以下是欄位類型的對應範例<fieldType name="unescapelowercase" class="solr.TextField"> <analyzer> <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\\(.)" replacement="$1"/> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType>
例如,若要只取消跳脫非字母數字字元,模式可以是
\\([^\p{IsAlphabetic}\p{Digit}])
。 config-file
-
必要
預設值:無
定義提升規則的檔案路徑。此檔案必須存在於 configset 中。與大多數配置不同,如果檔案在提交後發生變更,此元件會重新讀取其配置。但是,這在 SolrCloud 中不起作用,並且必須有實際的索引變更,提交才會生效,以便將其用作擷取變更的方式。在所有情況下,您可以重新載入受影響的核心/集合,以使用 configset 中的任何新配置。
forceElevation
-
選填
預設值:
false
預設情況下,此元件會尊重請求的
sort
參數:如果請求要求按日期排序,則會按日期排序結果。如果forceElevation=true
,結果會先傳回被提升的文件,然後按日期排序。預設值為false
。這也是一個請求參數,會覆寫配置。 useConfiguredElevatedOrder
-
選填
預設值:
true
當有多個文件被提升時,它們的相對順序應該是設定檔中的順序,還是應該受制於排序條件?這也是一個請求參數,會覆寫配置。當
forceElevation
為 true 且對欄位進行排序時,效果最為明顯。 elevateOnlyDocsMatchingQuery
-
選填
預設值:
false
預設情況下,此元件也會提升不屬於搜尋結果(符合查詢)的文件。如果您只想提升屬於搜尋結果的文件,請將此設定為
true
。
elevate.xml 檔案
提升的查詢結果可以在 config-file
引數中指定的外部 XML 檔案中設定。一個 elevate.xml
檔案可能如下所示
<elevate>
<query text="foo bar">
<doc id="1" />
<doc id="2" />
<doc id="3" />
</query>
<query text="ipod">
<doc id="MA147LL/A" /> <!-- put the actual ipod at the top -->
<doc id="IW-02" exclude="true" /> <!-- exclude this cable -->
</query>
<query text="foo bill" match="subset">
<doc id="11" />
</query>
</elevate>
在此範例中,查詢 "foo bar" 會先傳回文件 1、2 和 3,然後傳回相同查詢的正常結果。對於查詢 "ipod",它會先傳回 "MA147LL/A",並確保 "IW-02" 不在結果集中。
請注意第三個規則中值為 "subset"
的 match
參數。查詢 "bill bar foo" 會觸發此規則,因為該規則定義了查詢中出現的詞彙子集,且順序不限。此查詢會將文件 11 提升到最上方。match
參數接受 "exact"
(預設值)或 "subset"
值。子集比對具有可擴展性,可以新增許多具有 match="subset"
參數的規則。
如果要提升的文件未在 elevate.xml
檔案中定義,則應在查詢時使用 elevateIds
參數傳入。
使用查詢提升元件
enableElevation 參數
為了除錯,查看有提升文件和沒有提升文件的結果可能很有用。若要隱藏結果,請使用 enableElevation=false
https://127.0.0.1:8983/solr/techproducts/elevate?q=ipod&df=text&debugQuery=true&enableElevation=true
https://127.0.0.1:8983/solr/techproducts/elevate?q=ipod&df=text&debugQuery=true&enableElevation=false
forceElevation 參數
您可以透過將 forceElevation=true
新增至查詢 URL 來強制在執行期間提升。
https://127.0.0.1:8983/solr/techproducts/elevate?q=ipod&df=text&debugQuery=true&enableElevation=true&forceElevation=true
exclusive 參數
您可以透過將 exclusive=true
新增至 URL,強制 Solr 僅傳回提升檔案中指定的結果。
https://127.0.0.1:8983/solr/techproducts/elevate?q=ipod&df=text&debugQuery=true&exclusive=true
文件轉換器和 markExcludes 參數
[elevated]
文件轉換器可用於註解每個文件,指出它是否被提升。
https://127.0.0.1:8983/solr/techproducts/elevate?q=ipod&df=text&fl=id,[elevated]
同樣地,在疑難排解時,查看所有符合的文件(包括提升配置通常會排除的文件)可能會很有幫助。這可以透過使用 markExcludes=true
參數,然後使用 [excluded]
轉換器來實現。
https://127.0.0.1:8983/solr/techproducts/elevate?q=ipod&df=text&markExcludes=true&fl=id,[elevated],[excluded]
elevateIds 和 excludeIds 參數
當使用提升元件時,可以在請求時覆寫查詢的預先設定的提升清單,以使用這些請求參數中指定的唯一鍵。
例如,在下面的請求中,文件 3007WFP 和 9885A004 將被提升,而文件 IW-02 將被排除,無論在 elevate.xml 中為查詢 "cable" 設定了什麼提升或排除。
https://127.0.0.1:8983/solr/techproducts/elevate?q=cable&df=text&excludeIds=IW-02&elevateIds=3007WFP,9885A004
如果在請求時指定了這些參數中的任何一個,則會忽略查詢的整個提升配置。
例如,在下面的請求中,文件 IW-02 和 F8V7067-APL-KIT 將被提升,並且不會排除任何文件,無論在 elevate.xml 中為查詢 "ipod" 設定了什麼提升或排除。
https://127.0.0.1:8983/solr/techproducts/elevate?q=ipod&df=text&elevateIds=IW-02,F8V7067-APL-KIT
fq 參數與提升
預設情況下,查詢提升會遵守標準篩選查詢 (fq
) 參數。也就是說,如果查詢包含 fq
參數,則所有結果都將在該篩選器內,即使 elevate.xml
將其他文件新增至結果集中。
如果您希望提升的文件包含在結果集中,無論它們是否符合特定的篩選查詢,您可以使用 LocalParams 語法標記這些篩選查詢,然後透過 elevate.excludeTags
請求參數指定排除的標記。tag
區域參數和 elevate.excludeTags
請求參數都可以透過逗號分隔來指定多個值。
q=mainquery&fq=status:public&fq={!tag=dt}doctype:pdf&elevate.excludeTags=dt
q=mainquery&fq=status:public&fq={!tag=t1,t2}a:b&fq={!tag=t3}c:d&fq={!tag=t4}e:f&elevate.excludeTags=t1,t4
當篩選器被標記為排除時,它不會完全被忽略;而是被修改,以便提升的文件可以通過。未被提升的文件仍然受限於篩選器。