2015-02-23 70 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作为替代以取代与功能评分,我们计算查询给出的分数。