ElasticSearch:最快的得分方式是指数衰减的加权和?

时间:2016-01-12 00:21:13

标签: elasticsearch elasticsearch-plugin elasticsearch-2.0

我有兴趣在Elasticsearch 2.1中找到以下得分问题的最快解决方案

我的文档中有几个类似字段weight_1, ..., weight_Ndecay_1, ..., decay_N。我还提前知道参数decay_1, ..., decay_Nscale_1, ..., scale_N。我希望将以下计算为文档分数:

SUM(weight_i * 0.5**((decay_i - origin_i) / scale_i), i=1..N)

我会提前知道N - 因此我将确切地知道需要总结多少字段,并且评分解决方案不需要处理动态数量的字段。

使用N = 1非常容易:

{
   "query": {
      "function_score": {
         "functions": [
            {
               "exp": {
                  "decay_1": {
                     "origin": "origin_1",
                     "scale": "scale_1",
                     "decay": "0.5"
                  }
               }
            },
            {
               "field_value_factor": {
                  "field": "weight_1",
                  "missing": 0
               }
            }
         ]
      }
   }
}

当然,我可以使用Lucene表达式(因为我提前知道N)或使用本机Java脚本或Groovy脚本来完成此操作。但我对性能最好的解决方案很感兴趣,这似乎通常意味着尽可能使用内置版本。

0 个答案:

没有答案