二次評分給了用戶很多機會來定制業務邏輯
歡迎訪問本人博客:http://wangnan.tech
理解二次評分
二次評分是指重新計算查詢返回文檔中指定個數文檔的得分,es會截取查詢返回的前N個,并使用預定義的二次評分方法來重新計算他們的得分
二次評分查詢結構
從最簡單的查詢入手:match_all查詢類型,返回索引中所有文檔,每個返回的文檔的得分都是1.0,這樣可以充分體現二次評分對查詢返回文檔集的影響
查詢范例如下:
改查詢將每一個文檔的得分改寫為該文檔的year字段中的值
返回結果:
二次評分參數配置
在resource對象中,必須配置下面的參數:
- window_size 窗口大小,默認值是from和size參數值之和,它指定了每個分片上參與二次評分的文檔個數
- query_weight 查詢權重,默認值是1,原始查詢得分與二次評分的得分相加之前將乘以改值
- rescore_query_weight 二次評分查詢的權重值,默認值是1,二次評分查詢得分在與原始查詢得分相加之前,乘以該值
-
rescore_mode 二次評分模式,默認為total,可用的選項有total、max、min、avg和mutiply
- total 得分是兩種查詢之he
- max 兩種查詢中的最大值
- min 兩種查詢中的最小值
- avg 兩種查詢的平均值
- multiply 兩種查詢的乘積
小結
- 有時候,我們需要顯示查詢結果,并且使得頁面上靠前文檔的順序能受到一些額外的規則控制,但遺憾的是,我們并不能通過二次評分來實現,也許有些讀者會想到window-size參數,然而實際上這個參數與返回列表中靠前文檔并無關系,他只是制定了每個分片應該返回的文檔數,而且window_size不能小于頁面大小
- 二次評分功能并不能與排序一起使用,這是因為排序發生在二次評分之前,所以排序沒有考慮后續新計算出來的文檔得分
(注:內容整理自《深入理解Elasticsearch》)