Elasticsearch在函数输出上操作_score



我有以下示例JSON

[{"field_1" "abc",
"field_2": 2
"field_3" "some more text"
},
{"field_1" "xyz",
"field_2": 4
"field_3" "some more text"
}]

我已经编写了自定义脚本,以根据字段_2值给出输出

"if {(doc['field_2'] < 3) { return 1.2;} else if if {(doc['field_2'] < 5) { return 1.4;} else {return 1;}"

现在,我想将_score与脚本的返回输出相乘。

GET my_index/_search?
{
"query":{
"bool":{"Must"{....}
}
},
"_source":"*",
,{"script_field":{
"scrore_factor":{
"script":{
"lang":"painless",
"source":"""if {(doc['field_2'] < 3) { return 1.2;} else if if {(doc['field_2'] < 5) { return 1.4;} else {return 1;}"""
}
} 
}
}

我怎样才能做到这一点?我试图与_score相乘,但它没有解析我的查询

_scorescript_fields内部不可用。

不过,您可以使用function_score查询。你的例子充满了语法拼写错误,加上你的例子中没有名为field的属性,所以我只取一个数字字段——field2:

POST my_index/_search
{
"query": {
"bool": {
"must": [
{
"function_score": {
"query": {
"match_all": {}
},
"functions": [
{
"script_score": {
"script": "def factor; if (doc['field_2'].value < 3) { factor = 1.2; } else if (doc['field_2'].value < 5) { factor = 1.4 } else { factor = 1 } return _score * factor"
}
}
]
}
}
]
}
}
} 

最新更新