我试图让Elasticsearch
做MongoDB
对findOneAndUpdate
方法所做的同样的事情,但是这似乎是不可能的。
用例是多个服务器和线程将查看特定的索引以完成下一个任务。
因此,我最好的办法是使用唯一ID更新“下一个”任务/文档,然后检索该文档。
此查询将为我提供下一个要检索的文档:
GET /test_index/_search
{
"query": {
"bool": {
"must_not": {
"exists": {
"field": "next_id"
}
}
}
},
"sort": {
"next_update": {"order": "asc"}
},
"size": 1
}
但是我似乎不知道如何使用Update By Query API
只更新一行,我一直在尝试这个查询,但是它更新了找到的每个文档:
POST /test_index/_update_by_query
{
"query": {
"bool": {
"must_not": {
"exists": {
"field": "next_id"
}
}
}
},
"sort": {
"next_update": {"order": "asc"}
},
"script": {
"source": "ctx._source['next_update'] = params.next_id",
"params": {
"next_id": "xxxx"
}
}
}
我该如何解决这个问题?
1条答案
按热度按时间xhv8bpkk1#
您可以在
_update_by_query
中使用max_docs
参数,并将值设置为1
,以便仅对一个文档执行此操作。您可以查看this文档。