如何根据elasticsearch中的字段数据计算得分

时间:2015-06-23 13:07:00

标签: elasticsearch

我在文件中有以下字段

{
name: "Pearl",
age : 43,
weight: 54,
bodyWeight : 103,
height : 1.8
}

现在我想根据文件的bodyWeight到高度比得到文件的分数。怎么做?

2 个答案:

答案 0 :(得分:1)

Elasticsearch通过function score query提供自定义评分。在您的情况下,您可以使用custom script scoring

对文档进行评分
"script_score" : {
    "script" : "doc['bodyWeight'].value / doc['height'].value"
}

虽然这似乎是一种快速简便的解决方案,但它有两个问题: *如果height的值为0,则得分会有一个有趣的行为:无穷大? *脚本评分很慢

解决方案可能是索引文档中的权重

{
  name: "Pearl",
  age : 43,
  weight: 54,
  bodyWeight : 103,
  height : 1.8
  ratio: 57.2
}

随后score by field

"field_value_factor": {
  "field": "ratio"
}

答案 1 :(得分:1)

您可以使用脚本来实现此目的。试试下面的剧本:

{
  "query": {
    "function_score": {
      "functions": [
        {
          "script_score": {
            "script": "_score * doc['bodyWeight'].value / doc['height'].value"
          }
        }
      ],
      "score_mode": "sum",
      "boost_mode": "replace"
    }
  }
}

同样,您可以使用现场数据计算得分。有关评分的更多参考,请访问here