对于我的 ElasticSearch 查询之一,我想定义一个函数得分并按其排序。函数 score 获取计算的分数并向其添加提升值。每个文档都将其提升值存储在数字字段中。
像这样:
{
"from": 0,
"size": 10,
"query": {
"function_score": {
"functions": [
{
"script_score": {
"script": "_score + doc['boostFactor'].value"
}
}
],
"query": {
"filtered": {
"query": {
"query_string": {
"query": "search for this!"
}
}
}
},
"boost_mode": "replace"
}
}
}
到目前为止一切顺利,这工作正常。现在问题来了:接下来,每个文档都会有一个boost 值数组:
"boostFactor": [ 0, 0.5, 1, 3 ]
启动查询时,我希望脚本分数根据预定义的索引选择数组的特定元素。因此,假设 index=2,那么脚本分数可能如下所示:
"script_score": {
"script": "_score + doc['boostFactor'][2].value"
}
不幸的是,ElasticSearch 不接受这一点:
...Query Failed [Failed to execute main query]];
nested: CompileException[[Error: unexpected token in constructor]...
有任何想法吗?