假设我有一个带有 字段 emp_id 的 Elasticsearch 索引 Employee,我错误地用 emp_id=1 而不是 emp_id=2 保存了文档,并且emp_id=2 而不是 emp_id=1。
索引 Employee 的示例文档
[
{
"emp_id": "1",
"name": "aaaa"
},
{
"emp_id": "2",
"name": "bbbb"
},
{
"emp_id": "3",
"name": "cccc"
},
{
"emp_id": "4",
"name": "dddd"
}
]
现在我想将所有文档的 emp_id 值从 emp_id=1 更改/更新为 emp_id=2 并更改 emp_id=2 emp_id=1 使用 Elasticsearch 查询。
所以上面的文档应该像这样更改/更新:
[
{
"emp_id": "2",
"name": "aaaa"
},
{
"emp_id": "1",
"name": "bbbb"
},
{
"emp_id": "3",
"name": "cccc"
},
{
"emp_id": "4",
"name": "dddd"
}
]
注意: emp_id = 1,2,3,4 都存在于同一个索引中。我只想交换和迁移 emp_id 1 和 2 的值而不影响索引中的其他文档。
如何在 Elasticsearch 中以原子方式执行此操作?
如有任何帮助,我们将不胜感激。提前致谢!
最佳答案
您可以使用摄取管道和 _update_by_query
endpoint 执行此操作:
首先使用 script processor 创建一个摄取管道这将进行原子更改
PUT _ingest/pipeline/swap_ids
{
"processors": [
{
"script": {
"source": """
ctx.id = (ctx.id == '1') ? '2' : '1';
"""
}
}
]
}
然后,选择所有要更新的文档(即具有 id = 1 或 2
的文档)并使用您刚刚创建的管道更新它们:
POST test/_update_by_query?pipeline=swap_ids
{
"query": {
"terms": {
"id": ["1", "2"]
}
}
}
就是这样!
关于elasticsearch - Elasticsearch查询如何交换迁移不同文档中的索引字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68862591/