我正在尝试使用update_by_query对排序搜索中的项目进行排名。是否可以在脚本中获取文档的当前“索引”?
例如
创建索引:
PUT test
{
"mappings" : {
"person" : {
"properties" : {
"score" : { "type" : "integer" },
"rank" : { "type" : "integer" }
}
}
}
}
添加文档:
POST /test/person/1
{
"score": 100,
"rank": 0
}
POST /test/person/2
{
"score": 200,
"rank": 0
}
update_by_query
POST /test/_update_by_query
{
"script": {
"source": "ctx._source.rank=3", // how to get document "index" in sort here?
"lang": "painless"
},
"sort": { "score": "desc" }
}
按升序排序的结果应为
得分:200,排名:1 得分:100,排名:2
答案 0 :(得分:0)
好像您正在尝试更新单个文档。为此,_update API将是一个更合适的选择。例如:
POST test/_update/1
{
"script" : {
"source": "ctx._source.rank=params.rank",
"lang": "painless",
"params" : {
"rank" : 4
}
}
}
在上述情况下,您可以看到提供给API的文档ID仅更新该文档。
相反,_update_by_query API对索引中的每个文档执行更新。因此,如果您需要基于脚本更新多个文档,那么您就可以这样做。
希望有帮助...