2015-08-24 34 views

回答

2

一種解決方案是使用function_score查詢,讓您使用field_value_factor得分函數替換默認_score。它是這樣的:

curl -XPOST localhost:9200/listings/_search -d '{ 
    "query": { 
    "function_score": { 
     "functions": [ 
     { 
      "field_value_factor": { 
       "field": "score",   <---- we use the score field instead 
       "factor": 1,    <---- take the exact same score 
       "missing": 1    <---- use 1 as score if the score field is missing 
      } 
     } 
     ], 
     "query": { 
     "match_all": {} 
     }, 
     "boost_mode": "replace"   <---- we're replacing the default _score 
    } 
    } 
}' 

所以我們基本上計算使用score場乘以1,如果任何文件不具有score領域,我們姑且將比分爲1(你可以改變比分這對你的情況更有意義)。

UPDATE

根據您的意見,您需要_score由文檔的score場相乘。你可以簡單地通過刪除boost_mode參數來實現它,默認boost_modemultiply_scorefield_value_factor函數出來的任何值。

如果您需要完全替換默認的打分機制是基於你的score場代替,有使用similarity module,在那裏你可以單獨定義另一個相似的算法爲您score領域更復雜的方式。有一個偉大的blog post解釋相似性模塊的基本細節。

+0

我會在不同的客戶端使用它,那麼它會使得默認評分?如果我將發佈而不使用該請求將導致將使用doc的分數字段進行排序? –

+0

我想要的是讓_score * doc [score]對所有請求都是永久的。 –

+0

你的問題表明'_分數等於分數場',所以它不同於將它乘以分數字段:'_score * doc [score]'。讓我相應地更新我的答案。至於讓分數「永久」,我不認爲有辦法實現它,但是,您可以使用包含得分功能的搜索模板,這樣您就不必每次都指定它。 – Val

相關問題