我在數據中有分數(整數)字段,我從api獲取數據並直接將其發佈到localhost:9200 //列表/ 而且我希望項目_分數等於數據中的分數場。在elasticsearch中更改_score使其等於doc的分數字段
現在的解決方案是增加?sort=score:desc
到URL
我在數據中有分數(整數)字段,我從api獲取數據並直接將其發佈到localhost:9200 //列表/ 而且我希望項目_分數等於數據中的分數場。在elasticsearch中更改_score使其等於doc的分數字段
現在的解決方案是增加?sort=score:desc
到URL
一種解決方案是使用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_mode
是multiply
_score
與field_value_factor
函數出來的任何值。
如果您需要完全替換默認的打分機制是基於你的score
場代替,有使用similarity
module,在那裏你可以單獨定義另一個相似的算法爲您score
領域更復雜的方式。有一個偉大的blog post解釋相似性模塊的基本細節。
我會在不同的客戶端使用它,那麼它會使得默認評分?如果我將發佈而不使用該請求將導致將使用doc的分數字段進行排序? –
我想要的是讓_score * doc [score]對所有請求都是永久的。 –
你的問題表明'_分數等於分數場',所以它不同於將它乘以分數字段:'_score * doc [score]'。讓我相應地更新我的答案。至於讓分數「永久」,我不認爲有辦法實現它,但是,您可以使用包含得分功能的搜索模板,這樣您就不必每次都指定它。 – Val