DisMax查詢解析器
DisMax查詢解析器設計用於處理用戶輸入的簡單短語(無複雜語法),並根據每個字段的重要性使用不同的權重(升序)在多個字段中搜索單個術語。其他選項允許用戶根據特定於每個用例的規則(獨立於用戶輸入)影響分數。
一般來說,與“Lucene”Solr查詢解析器的接口相比,DisMax查詢解析器的接口更像Google的接口。這種相似性使DisMax成爲許多用戶應用程序的適當查詢解析器。它接受一個簡單的語法,很少產生錯誤消息。
DisMax查詢解析器支持非常簡化的lucene查詢解析器語法子集。在Lucene中,引號可用於對短語進行分組,而+/-可用於表示強制和可選子句。所有其他Lucene查詢解析器特殊字符(except AND and OR)都被轉義以簡化用戶體驗。DisMax查詢解析器負責使用布爾子句從用戶的輸入中構建一個良好的查詢,該布爾子句包含用戶指定的多個字段和提升的DisMax查詢。cross fields and boosts 它還允許solr管理員提供額外的提升查詢、提升函數和過濾查詢,以人爲地影響所有搜索的結果。這些選項都可以指定爲solrconfig.xml文件中請求處理程序的默認參數,也可以在solr查詢URL中重寫。
Interested in the technical concept behind the DisMax name? DisMax stands for Maximum Disjunction. Here’s a definition of a Maximum Disjunction or "DisMax" query:
一種查詢,它生成由其子查詢生成的文檔的聯合,並用任何子查詢生成的該文檔的最大分數對每個文檔進行打分,再加上任何其他匹配子查詢的中斷增量。
無論您是否記得這一解釋,請記住,DisMax查詢解析器主要設計爲易於使用,並且幾乎可以接受任何輸入而不返回錯誤。
DisMax Query Parser Parameters
除了常見的請求參數、高亮的參數和簡單的分面參數外,DisMax查詢分析器還支持下面描述的參數。與標準查詢解析器一樣,DisMax查詢解析器允許在solrconfig.xml中指定默認參數值,或者由請求中的查詢時進行覆蓋。
下面的章節將詳細解釋這些參數。
q
q參數定義了構成搜索本質的主要“查詢”。該參數支持用戶提供的原始輸入字符串,沒有特殊轉義。+和-字符被視爲術語的“強制(必需)”和“禁止(禁用)”修飾語。以平衡引號字符包裝的文本(例如,“San Jose”)被視爲短語。任何包含奇數個引號字符的查詢的計算結果都像根本沒有引號字符一樣。
q參數不支持通配符,例如*
q.alt
如果指定了,則q.alt參數在未指定主q參數或該參數爲空時定義一個查詢(默認情況下,將使用標準查詢分析語法對其進行分析)。當您需要像查詢這樣的查詢來匹配所有文檔時,q.alt參數就派上用場了(不要忘記該查詢的rows=0!)以獲取集合範圍內的分面計數。
qf (Query Fields)
qf參數引入一個字段列表,每個字段都被分配一個增強因子,以增加或減少該特定字段在查詢中的重要性。例如,下面的查詢:
qf="fieldOne^2.3 fieldTwo fieldThree^0.4"
將FieldOne的Boost指定爲2.3,將FieldTwo保留爲默認Boost(因爲未指定Boost Factor),而Field3的Boost爲0.4。這些增強因素使得fieldOne 的意義比fieldTwo的意義更重要,而fieldTwo的意義又比fieldThree的意義更重要。
mm (Minimum Should Match) 最小應匹配
處理查詢時,Lucene/Solr識別三種類型的子句:強制、禁止和“可選”(也稱爲“應”子句)。默認情況下,q參數中指定的所有單詞或短語都將被視爲“可選”子句,除非它們前面有“+”或“-”。當處理這些“可選”子句時,mm參數使我們可以說這些子句中的某個最小數目必須匹配。DisMax查詢解析器在如何指定最小數目方面提供了很大的靈活性。
下表說明了可以指定mm值的各種方法。
Syntax |
Example |
Description |
正整數 |
3 |
定義必須匹配的子句的最小數目,而不管總共有多少個子句。 |
負整數 |
-2 |
將匹配子句的最小數目設置爲可選子句的總數減去該值。 |
百分比 |
75% |
將匹配子句的最小數目設置爲可選子句總數的該百分比。根據百分比計算的數字向下取整並用作最小值。 |
負百分比 |
-25% |
指示可選子句總數的百分比可能丟失。從百分比計算出的數字向下取整,然後從總數中減去以確定最小數字。 |
以一個正整數開始,後跟一個>或<符號和另一個值的表達式。 |
3<90% |
定義一個條件表達式,指示如果可選子句的數目等於(或小於)整數,則它們都是必需的,但如果它大於整數,則應用規範。在這個例子中:如果有1到3個子句,它們都是必需的,但是對於4個或更多的子句,只需要90%。 |
涉及>或<符號的多個條件表達式 |
2<-25% 9<-3 |
定義多個條件,每個條件僅對大於其前面條件的數字有效。在左邊的示例中,如果有1或2個子句,則兩者都是必需的。如果有3-9條,除25%外,其餘都是必需的。如果超過9條,除三條外,其餘都是必需的。 |
指定mm值時,請記住以下內容:
1)在處理百分比時,可以使用負值在邊緣情況下獲得不同的行爲。75%和-25%在處理4個條款時意味着相同的事情,但在處理5個條款時75%意味着需要3個,但-25%意味着需要4個。
2)If the calculations based on the parameter arguments determine that no optional clauses are needed, the usual rules about Boolean queries still apply at search time. (That is, a Boolean query containing no required clauses must still match at least one optional clause).
3)無論計算結果是多少,SOLR都不會使用大於可選子句數或小於1的值。換句話說,無論計算結果有多低或有多高,所需匹配的最小數目永遠不會小於1或大於子句的數目。
4)當在配置了不同查詢分析器的多個字段之間進行搜索時,字段之間可選子句的數目可能會有所不同。在這種情況下,mm指定的值適用於可選子句的最大數目。例如,如果查詢子句被視爲其中一個字段的停止字,則該字段的可選子句數將小於其他字段的可選子句數。如果mm設置爲100%,則具有此類stopword子句的查詢將不會返回該字段中的匹配項,因爲刪除的子句不算匹配的。
mm的默認值爲0%(所有條款可選),除非q.op被指定爲“and”,在這種情況下,mm默認爲100%(所有條款都需要)。
需補充。