如何在elasticsearch 6.4中通过查询更新以从排序查询创建递增排名

tuwxkamq  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(1)|浏览(138)

我正在尝试_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" }
}

按升序排序时的结果应

score: 200, rank: 1
score: 100, rank: 2
wi3ka0sx

wi3ka0sx1#

看起来您正在尝试更新单个文档。对于这种情况,_update API将是更合适的选择。例如:

POST test/_update/1
{
    "script" : {
        "source": "ctx._source.rank=params.rank",
        "lang": "painless",
        "params" : {
            "rank" : 4
        }
    }
}

在上面的例子中,您可以看到文档ID被提供给只更新该文档的API。
相反,_update_by_query API会对索引中的每个文档执行更新,因此,如果您需要基于脚本更新多个文档,这将是您的选择。
希望能帮上忙...

相关问题