W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
Solr 的 DisMax 查詢解析器設(shè)計用于處理由用戶輸入的簡單短語(沒有復(fù)雜的語法),并基于每個字段的重要性使用不同的權(quán)重(boosts)在多個字段中搜索各個術(shù)語。其他選項(xiàng)使用戶能夠根據(jù)每個用例的具體規(guī)則影響評分(獨(dú)立于用戶輸入)。
一般來說,DisMax 查詢解析器的接口更像 Google 的接口,而不是 “l(fā)ucene” Solr 查詢解析器的接口。這種相似性使得 DisMax 成為許多使用者應(yīng)用程序的合適查詢解析器。它接受簡單的語法,很少產(chǎn)生錯誤消息。
DisMax 查詢解析器支持 Lucene QueryParser 語法的一個極其簡化的子集。和 Lucene 一樣,引號可以用來對短語進(jìn)行分組,+/- 可以用來表示強(qiáng)制性和可選的子句。所有其他的 Lucene 查詢解析器特殊字符(AND 和 OR 除外)都被轉(zhuǎn)義以簡化用戶體驗(yàn)。DisMax 查詢解析器負(fù)責(zé)使用布爾子句構(gòu)建用戶輸入的良好查詢,該查詢包含跨域的 DisMax 查詢以及用戶指定的提升。它還可以讓 Solr 管理員提供額外的 boosting 查詢、boosting 函數(shù)和過濾查詢,以人為影響所有搜索的結(jié)果。這些選項(xiàng)都可以指定為 solrconfig.xml 文件中的請求處理程序的默認(rèn)參數(shù),或者在 Solr 查詢 URL 中被重寫。
對 DisMax 名稱背后的技術(shù)概念感興趣?其實(shí) DisMax 代表的是 Maximum Disjunction。以下是對 Maximum Disjunction 或 “DisMax” 查詢的定義:
一個查詢,它生成由其子查詢產(chǎn)生的文檔的聯(lián)合,該查詢將為每個文檔評分(由任何子查詢生成的該文檔的最高分?jǐn)?shù)),并為任何其他匹配的子查詢加一個并列中斷增量。
不管您是否記得這個解釋,記住 DisMax 查詢解析器的主要目的是易于使用,并且?guī)缀蹩梢越邮苋魏屋斎攵粫祷劐e誤。
除了常見的請求參數(shù)、突出顯示參數(shù)和簡單的 facet 參數(shù)外,DisMax 查詢解析器還支持下面描述的參數(shù)。與標(biāo)準(zhǔn)查詢解析器一樣,DisMax 查詢解析器允許在 solrconfig. xml 中指定默認(rèn)參數(shù)值,或者在請求中由查詢時間值重寫。
以下部分詳細(xì)解釋這些參數(shù)。
該 q 參數(shù)定義了構(gòu)成搜索本質(zhì)的主要 “查詢”。該參數(shù)支持用戶提供的原始輸入字符串,沒有特殊的轉(zhuǎn)義。術(shù)語中的 + 和 - 字符被視為“強(qiáng)制性”和“禁止”修飾符。用平衡的引號字符(例如,“San Jose”)包裹的文本被視為一個短語。包含奇數(shù)個引號字符的任何查詢的計算方式就像根本沒有引號字符一樣。
該 q 參數(shù)不支持通配符,如 *。
如果指定,q.alt 參數(shù)定義一個查詢(默認(rèn)情況下將使用標(biāo)準(zhǔn)查詢解析語法進(jìn)行解析),當(dāng)主 q 參數(shù)未指定或?yàn)榭諘r。q.alt 當(dāng)您需要一個類似于查詢的東西來匹配所有的文檔時(不要忘記 &rows=0),q.alt 參數(shù)就派上用場了,可以獲得收集范圍的 faceting 計數(shù)。
qf 參數(shù)引入了一個字段列表,每個字段都分配了一個 boost 因子來增加或減少該字段在查詢中的重要性。例如,下面的查詢:
qf="fieldOne^2.3 fieldTwo fieldThree^0.4"
分配 fieldOne 一個 2.3 的提升, fieldTwo 為默認(rèn)提升(因?yàn)闆]有 boost 因素被指定),并且 fieldThree 提高 0.4。這些 boost 因素使 fieldOne 中的匹配比 fieldTwo 的匹配更加重要,它比 fieldThree 中的匹配更為重要。
在處理查詢時,Lucene / Solr 識別三種類型的子句:強(qiáng)制性的,禁止的和“optional”(也被稱為“should”子句)。默認(rèn)情況下,q 參數(shù)中指定的所有單詞或短語都被視為“optional”子句,除非它們前面有“+”或“ - ”。處理這些“optional”子句時,該 mm 參數(shù)可以說這些子句的某些最小值必須匹配。DisMax 查詢解析器在如何指定最小數(shù)字方面提供了很大的靈活性。
下表解釋了可以指定 mm 值的各種方法。
句法 | 示例 | 描述 |
---|---|---|
正整數(shù)(Positive integer) |
3 |
定義必須匹配的最小子句數(shù),而不管總共有多少個子句。 |
負(fù)整數(shù)(Negative integer) |
-2 |
將匹配子句的最小數(shù)量設(shè)置為可選子句的總數(shù)減去此值。 |
百分比(Percentage) |
75% |
將匹配子句的最小數(shù)量設(shè)置為可選子句總數(shù)的百分比。從百分比計算出的數(shù)字向下取整,作為最小值。 |
負(fù)比例(Negative percentage) |
-25% |
表示可選子句總數(shù)的百分比可能會丟失。從百分比計算出的數(shù)字向下舍入,然后從總數(shù)中減去以確定最小數(shù)量。 |
表達(dá)式以正整數(shù)開頭,后跟一個>或<符號和另一個值 |
3 <90% |
定義一個條件表達(dá)式,指出如果可選子句的數(shù)目等于(或小于)整數(shù),則它們都是必需的,但如果它大于整數(shù),則應(yīng)用規(guī)范。在這個例子中:如果有1到3個子句,他們都是必需的,但是對于4個或更多子句,只需要90%。 |
涉及>或<符號的多個條件表達(dá)式 |
2 <-25%9 <-3 |
定義了多個條件,每個條件只對比它前面的一個更大的數(shù)字有效。在左邊的例子中,如果有1或2個子句,那么這兩個都是必需的。如果有3-9個子句,只有25%是必需的。如果有9個以上的話,除了3個外都是必需的。 |
指定 mm 值時,請記住以下幾點(diǎn):
mm 的默認(rèn)值為 100% (意味著所有子句都必須匹配)。
一旦使用 fq 和 qf 參數(shù)確定了匹配文檔的列表,就可以使用 pf 參數(shù)“boost”文檔的得分,因?yàn)?q 參數(shù)中的所有項(xiàng)都出現(xiàn)在非常接近的情況下。
該格式與 qf 參數(shù)所使用的格式相同:當(dāng)從整個 q 參數(shù)中進(jìn)行短語查詢時,字段列表和“boosts”將與每個字段相關(guān)聯(lián)。
ps 參數(shù)指定應(yīng)用于使用 pf 參數(shù)指定的查詢的 “短語 slop” 的數(shù)量。短語 slop 是一個標(biāo)記需要相對于另一個標(biāo)記移動以匹配查詢中指定的短語的位置的數(shù)量。
qs 參數(shù)指定用 qf 參數(shù)明確包含在用戶查詢字符串中的短語查詢所允許的傾斜量。如上所述,slop 是指為了匹配在查詢中指定的短語,一個標(biāo)記需要相對于另一個標(biāo)記移動的位置的數(shù)量。
tie 參數(shù)指定一個浮點(diǎn)值(應(yīng)該遠(yuǎn)遠(yuǎn)小于1),以便在 DisMax 查詢中用作 tiebreaker。
當(dāng)來自用戶輸入的術(shù)語針對多個字段進(jìn)行測試時,可能會有多個字段匹配。如果是這樣,每個字段將根據(jù)該字段在該字段中的普遍程度(對于每個文檔相對于所有其他文檔)產(chǎn)生不同的 score。通過該 tie 參數(shù),您可以控制查詢的最終 score 與最高 score 字段相比,將會受較低評分字段影響的程度。
值為“0.0”(默認(rèn)值)使查詢成為純粹的“分離最大查詢”:也就是說,只有最大 scoring 子查詢才有助于最終 score。值為“1.0”使查詢成為一個純粹的“分離總和查詢”,因?yàn)樽罱K score 將是子查詢 score 的總和,這與最大 scoring 子查詢無關(guān)。通常,一個較低的值(如0.1)是有用的。
bq 參數(shù)指定一個附加的可選查詢子句,將添加到用戶的主要查詢中以影響 score。例如,如果您想為最近的文檔添加相關(guān)性 boost:
q=cheese
bq=date:[NOW/DAY-1YEAR TO NOW/DAY]
您可以指定多個 bq 參數(shù)。如果您希望將查詢作為單獨(dú)的子句進(jìn)行分析,請使用多個 bq 參數(shù)。
bf 參數(shù)指定將用于構(gòu)造 FunctionQueries 的函數(shù)(具有可選的 boosts),該函數(shù)將作為將影響 score 的可選子句添加到用戶的主查詢中??梢允褂糜?Solr 本地支持的任何函數(shù),以及 boost 值。例如:
recip(rord(myfield),1,2,3)^1.5
使用 bf 參數(shù)指定函數(shù)本質(zhì)上只是使用 bqparam 與 {!func} 解析器結(jié)合的簡寫。
例如,如果要首先顯示最近的文檔,則可以使用以下任一項(xiàng):
bf=recip(rord(creationDate),1,1000,1000)
...or...
bq={!func}recip(rord(creationDate),1,1000,1000)
本節(jié)中的所有示例 URL 均假設(shè)您正在運(yùn)行 Solr 的 “techproducts” 示例:
bin/solr -e techproducts
使用標(biāo)準(zhǔn)查詢解析器得到單詞 “video”的結(jié)果,我們假設(shè) “df” 指向要搜索的字段:
http://localhost:8983/solr/techproducts/select?q=video&fl=name+score
"dismax" 解析器被配置為跨 text、features、name、sku、id、manu 和 cat 字段進(jìn)行搜索,它們都具有不同的增強(qiáng)功能,旨在確保 "better" 的匹配首先出現(xiàn),具體來說: 在 name 和 cat 字段上匹配的文檔獲得更高的分?jǐn)?shù)。
http://localhost:8983/solr/techproducts/select?defType=dismax&q=video
請注意,此實(shí)例還配置了一個默認(rèn)的字段列表,可以在 URL 中重寫。
http://localhost:8983/solr/techproducts/select?defType=dismax&q=video&fl=*,score
您還可以覆蓋搜索的字段以及每個字段得到的 boost 程度。
http://localhost:8983/solr/techproducts/select?defType=dismax&q=video&qf=features^20.0+text^0.3
您可以提高具有與特定值匹配的字段的結(jié)果。
http://localhost:8983/solr/techproducts/select?defType=dismax&q=video&bq=cat:electronics^5.0
另一個請求處理程序在 “/ instock” 處注冊,并具有稍微不同的配置選項(xiàng),特別是:(inStock:true 的過濾器)。
http://localhost:8983/solr/techproducts/select?defType=dismax&q=video&fl=name,score,inStock
http://localhost:8983/solr/techproducts/instock?defType=dismax&q=video&fl=name,score,inStock
這個解析器中其他非??岬墓δ苤皇菑?qiáng)大的支持,根據(jù)用戶查詢中有多少術(shù)語來指定要使用的“BooleanQuery.minimumNumberShouldMatch”。這些允許錯別字和部分匹配的靈活性。對于 dismax 解析器,一個和兩個單詞查詢要求所有可選子句匹配,但對于三到五個字查詢,允許一個丟失的單詞。
http://localhost:8983/solr/techproducts/select?defType=dismax&q=belkin+ipod
http://localhost:8983/solr/techproducts/select?defType=dismax&q=belkin+ipod+gibberish
http://localhost:8983/solr/techproducts/select?defType=dismax&q=belkin+ipod+apple
使用 debugQuery 選項(xiàng)可以查看已解析的查詢以及每個文檔的分?jǐn)?shù)解釋。
http://localhost:8983/solr/techproducts/select?defType=dismax&q=belkin+ipod+gibberish&debugQuery=true
http://localhost:8983/solr/techproducts/select?defType=dismax&q=video+card&debugQuery=true
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: