put /my_index/my_type/1
put /my_index/my_type/2
現在執行以下bool
查詢:
},}]
}}
}
但是我們發現查詢的結果是文件 1 的評分更高:
},}
]}
為了理解導致這樣的原因, 需要回想一下bool
是如何計算評分的:
它會執行should
語句中的兩個查詢。
加和兩個查詢的評分。
乘以匹配語句的總數。
除以所有語句總數(這裡為:2)。
文件 1 的兩個欄位都包含brown
這個詞,所以兩個match
語句都能成功匹配並且有乙個評分。文件 2 的body
字段同時包含brown
和fox
這兩個詞,但title
字段沒有包含任何詞。這樣,body
查詢結果中的高分,加上title
查詢中的 0 分,然後乘以二分之一,就得到比文件 1 更低的整體評分。
在本例中,title
和body
欄位是相互競爭的關係,所以就需要找到單個 最佳匹配 的字段。
如果不是簡單將每個欄位的評分結果加在一起,而是將 最佳匹配 欄位的評分作為查詢的整體評分,結果會怎樣?這樣返回的結果可能是: 同時 包含brown
和fox
的單個欄位比反覆出現相同詞語的多個不同欄位有更高的相關度。
不使用bool
查詢,可以使用dis_max
即分離 最大化查詢(disjunction max query) 。分離(disjunction)的意思是 或(or) ,這與可以把結合(conjunction)理解成 與(and) 相對應。分離最大化查詢(disjunction max query)指的是: 將任何與任一查詢匹配的文件作為結果返回,但只將最佳匹配的評分作為查詢的評分結果返回 :
},}]
}}
}
得到我們想要的結果為:
},}
]}
單字串多欄位查詢 Multi Match
三種場景 最佳字段 best fields 當欄位之間相互競爭,相互關聯。例如 title 和 body 這樣的字段。評分來 最匹配字段 多數字段 most fields 處理英 內容時 種常 的 段是,在主欄位 english analyzer 抽取詞 加 同義詞,以 匹配更多的 檔。相同的 本,...
簡單字串
給你乙個由 0 9 組成的字串s 1 s 的長度 100 和乙個正整數n 1 n 3 我們將所有的 0 都看成空格。這樣你就得到幾個分隔開來的字串。輸出第n個字串。題目保證分隔開來的字串的數量大於等於n。input 第一行輸入正整數t 1 t 100 代表t組測試資料。對於每一組測試資料由一行組成 ...
簡單字串比較
題目描述 請使用字串比較函式,比較兩個字串的大小,並按要求輸出比較後的結果。字串最長不超過15個字元。輸入兩個字串str1和str2,如果第乙個字串與第二個字串相等,輸出str1 str2,如果第乙個字串大於第二個字串,輸出str1 str2,如果第乙個字串小於第二個字串,輸出str1 str2。輸...