2015-02-23 48 views
0

如何將來自Elasticsearch的結果乘以某個因子。例如從Elasticsearch結果不乘以應該是這樣的:如何將Elasticsearch的結果乘以一個因子?

{ [ 1 => { score: 10 }, 2 => { score: 20 } ] } 

我想要的分數由4相乘的係數(此處:4)應該是可變的。 其結果將是:

{ [ 1 => { score: 40 }, 2 => { score: 80 } ] } 

這是可能的,而且,如果是,我將如何做呢?

在此先感謝。

+0

不知道我是否有時間寫出正確的答案,但你可能想要一些叫做** boosting **的東西,顯然,它已被更好的稱爲[功能評分](http:// www。 elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html)。此外,[這個SO問題](http://stackoverflow.com/questions/12427449/elasticsearch-boosting-relevance-based-on-field-value)可以使用 – 2015-02-24 01:06:29

回答

2

您需要爲此使用function score query。 裏面,在腳本的功能,可以將多個分數值(可在腳本中_score)

{ 
    "query": { 
    "function_score": { 
     "query": { 
       // Query // 
     }, 
     "functions": [ 
     { 
      "script_score": { 
      "script": "_score * boostFactor", 
      "params": { 
       "boostFactor": 4 
      } 
      } 
     } 
     ], 
     "score_mode": "sum", 
     "boost_mode": "replace" 
    } 
    } 
} 

使用boost_mode作爲替代以取代與功能評分,我們計算查詢給出的分數。