擴展 DisMax (eDisMax) 查詢解析器
擴展 DisMax (eDisMax) 查詢解析器是 DisMax 查詢解析器的改良版本。
除了支援所有 DisMax 查詢解析器參數之外,擴展 DisMax
-
還支援 標準查詢解析器語法,例如(非詳盡列表)
-
布林運算子,例如 AND (+, &&)、OR (||)、NOT (-)。
-
選擇性地將小寫的「and」和「or」視為 Lucene 語法模式中的「AND」和「OR」
-
選擇性地允許使用其他查詢解析器或函數來嵌入查詢
-
-
包含在語法錯誤情況下的改良智慧型部分跳脫;在此模式下仍支援欄位查詢、+/- 和詞組查詢。
-
透過使用字詞 shingles 來改進鄰近提升;在套用鄰近提升之前,您不需要查詢來比對文件中的所有字詞。
-
包含進階停用詞處理:停用詞在查詢的強制部分中不是必需的,但仍用於鄰近提升部分。如果查詢包含所有停用詞,例如「to be or not to be」,則所有字詞都是必需的。
-
包含改良的提升函數:在擴展 DisMax 中,
boost
函數是乘數 而不是加數,從而改善您的提升結果;也支援 DisMax 的加法提升函數 (bf
和bq
)。 -
支援純負向巢狀查詢:諸如
+foo (-foo)
之類的查詢將會比對所有文件。 -
可讓您指定允許最終使用者查詢的欄位,並禁止直接欄位搜尋。
擴展 DisMax 參數
除了所有的 DisMax 參數之外,Extended DisMax 還包含以下查詢參數:
sow
-
是否以空白分隔。如果設定為
true
,則會針對每個以空白分隔的詞彙單獨調用文字分析。預設值為false
;以空白分隔的詞彙序列將會一次性提供給文字分析,以啟用在詞彙序列上運作的分析篩選器的正常功能,例如多字同義詞和詞語搭配。 mm
-
最小匹配。有關
mm
的說明,請參閱 DisMax 的mm
參數。eDisMax 的預設mm
值與 DisMax 不同。-
預設的
mm
值為 0%-
如果查詢包含「AND」以外的明確運算符(「-」、「+」、「OR」、「NOT」);或
-
如果
q.op
為「OR」或未指定。
-
-
如果
q.op
為「AND」且查詢不包含任何「AND」以外的明確運算符,則預設的mm
值為 100%。
-
mm.autoRelax
-
如果為
true
,則當從某些但不是全部qf
欄位中移除子句時(例如透過停用詞篩選器),所需子句的數量將會自動放寬。如果您遇到由於qf
欄位之間停用詞移除不均勻而導致查詢返回零結果的情況,請使用此參數作為解決方案。請注意,放寬
mm
可能會導致不良的副作用,例如降低搜尋的精確度,這取決於您的索引內容性質。 boost
-
一個多值字串列表,解析為 函式,其結果將乘以所有匹配文件的主查詢分數。此參數是使用
BoostQParserPlugin
包裝 eDisMax 產生的查詢的簡寫方式。
以下兩個範例是等效的:
q={!edismax qf=name}ipod
boost=div(1,sum(1,price))
q={!boost b=div(1,sum(1,price)) v=$qq}
qq={!edismax qf=name}ipod
lowercaseOperators
-
一個布林參數,表示小寫的「and」和「or」是否應視為與運算符「AND」和「OR」相同。預設值為
false
。 pf
-
片語欄位。使用
fq
和qf
參數識別出匹配的文件列表後,如果 q 參數中的所有詞彙都緊密相鄰出現,則可以使用pf
參數來「提高」文件的分數。其格式與
qf
參數使用的格式相同:欄位列表和「提高權重」,用於在根據整個 q 參數建立片語查詢時將其與每個欄位關聯。 ps
-
片語彈性。使用
pf
、pf2
和/或pf3
欄位(影響權重提升)建立片語查詢時,詞彙之間的預設彈性量(距離)。另請參閱以下 使用「彈性」 章節。 pf2
-
一個具有可選權重的多值欄位列表。與
pf
類似,但基於單詞對詞語搭配。 ps2
-
這與
ps
類似,但會覆蓋用於pf2
的彈性因子。如果未指定,則使用ps
。 pf3
-
一個具有可選權重的多值欄位列表,基於單詞搭配的三元組。與
pf
類似,除了不是根據輸入中的所有單詞為每個欄位建立片語,而是根據單詞三元組詞語搭配為每個欄位建立一組片語。 ps3
-
這與
ps
類似,但會覆蓋用於pf3
的彈性因子。如果未指定,則使用ps
。 stopwords
-
一個布林參數,表示在解析查詢時是否應遵守查詢分析器中配置的
StopFilterFactory
。如果將此設定為false
,則會忽略查詢分析器中的StopFilterFactory
。 uf
-
指定允許最終使用者明確查詢的架構欄位,以及切換是否支援嵌入式 Solr 查詢。此參數支援萬用字元。多個欄位必須以空格分隔。
預設值是允許所有欄位且不允許嵌入式 Solr 查詢,相當於
uf=* -_query_
。-
若只允許標題欄位,請使用
uf=title
。 -
若允許標題和所有以 '_s' 結尾的欄位,請使用
uf=title *_s
。 -
若允許除標題之外的所有欄位,請使用
uf=* -title
。 -
若要不允許所有欄位搜尋,請使用
uf=-*
。 -
若要允許嵌入式 Solr 查詢(例如,
_query_:"…"
或_val_:"…"
或{!lucene …}
),您必須在uf
中參照魔術欄位_query_
來明確啟用此功能。
-
eDisMax 查詢範例
本節中的所有範例 URL 都假設您正在執行 Solr 的「techproducts」範例
bin/solr start -e techproducts
根據文件的受歡迎程度,提高查詢詞彙「hello」的結果
https://127.0.0.1:8983/solr/techproducts/select?defType=edismax&q=hello&pf=text&qf=text&boost=popularity
搜尋 iPods 或 video
https://127.0.0.1:8983/solr/techproducts/select?defType=edismax&q=ipod+OR+video
跨多個欄位搜尋,並指定(透過提高權重)每個欄位相對於彼此的重要性
https://127.0.0.1:8983/solr/techproducts/select?q=video&defType=edismax&qf=features^20.0+text^0.3
您可以提高具有符合特定值的欄位的結果
https://127.0.0.1:8983/solr/techproducts/select?q=video&defType=edismax&qf=features^20.0+text^0.3&bq=cat:electronics^5.0
使用 mm
參數時,1 個和 2 個單詞的查詢要求所有可選子句都匹配,但對於具有三個或更多子句的查詢,則允許缺少一個子句
https://127.0.0.1:8983/solr/techproducts/select?q=belkin+ipod&defType=edismax&mm=2
https://127.0.0.1:8983/solr/techproducts/select?q=belkin+ipod+gibberish&defType=edismax&mm=2
https://127.0.0.1:8983/solr/techproducts/select?q=belkin+ipod+apple&defType=edismax&mm=2
在以下範例中,我們看到 qf
參數的每個欄位覆寫用於將查詢字串中的「name」別名為「last_name
」和「first_name
」欄位
defType=edismax
q=sysadmin name:Mike
qf=title text last_name first_name
f.name.qf=last_name first_name
使用「彈性」
Dismax
和 Edismax
可以針對所有查詢欄位執行查詢,並且還可以針對片語欄位以片語的形式執行查詢(這只會用於提高文件的權重,而不是實際用於匹配)。但是,該片語查詢可以具有「彈性」,這是在考慮片語匹配時查詢詞彙之間的距離。例如:
q=foo bar
qf=field1^5 field2^10
pf=field1^50 field2^20
defType=dismax
使用這些參數,DisMax 查詢解析器會產生類似以下的查詢:
(+(field1:foo^5 OR field2:foo^10) AND (field1:bar^5 OR field2:bar^10))
但它也會產生另一個僅用於提高結果權重的查詢:
field1:"foo bar"^50 OR field2:"foo bar"^20
因此,任何具有詞彙「foo」和「bar」的文件都會匹配;但是,如果某些文件將兩個詞彙都作為片語,則它的分數會更高,因為它更相關。
如果您添加參數 ps
(片語彈性),則第二個查詢將改為:
ps=10 field1:"foo bar"~10^50 OR field2:"foo bar"~10^20
這表示如果詞彙「foo」和「bar」出現在文件中,且彼此之間的距離小於 10 個詞彙,則該片語將會匹配。例如,以下文件:
*Foo* term1 term2 term3 *bar*
將會匹配片語查詢。
如何使用片語彈性?通常在請求處理程序(在 solrconfig
中)中進行配置。
使用查詢彈性(qs
)時,概念類似,但它適用於用戶的明確片語查詢。例如,如果您想搜尋名稱,則可以輸入:
q="Hans Anderson"
包含「Hans Anderson」的文件將會匹配,但是包含中間名「Christian」或名稱以姓氏優先(「Anderson, Hans」)書寫的文件則不會。對於這些情況,可以配置查詢欄位 qs
,以便即使使用者搜尋明確的片語查詢,也會套用彈性。
最後,除了片語欄位(pf
)參數之外,edismax
也支援 pf2
和 pf3
參數,用於建立雙字組和三字組片語查詢的欄位。這些參數查詢的片語彈性可以使用 ps2
和 ps3
參數分別指定。如果您使用 pf2
/pf3
但不使用 ps2
/ps3
,則這些參數查詢的片語彈性將取自 ps
參數(如果有的話)。