我在文件中有以下字段
{
name: "Pearl",
age : 43,
weight: 54,
bodyWeight : 103,
height : 1.8
}
现在我想根据文件的bodyWeight到高度比得到文件的分数。怎么做?
答案 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
}
"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