对象的 Elasticsearch 部分更新(multi=True)
Elasticsearch partial update of Object(multi=True)
如何使用字段映射更新文档 Object(multi=True)
,
当文档可以同时具有单个值(字典)和多个值(字典列表)时。
同一索引中的文档示例:
items
中的单个值:
{
"title": "Some title",
"items": {
"id": 123,
"key": "foo"
}
}
items
中的多个值:
{
"title": "Some title",
"items": [{
"id": 456,
"key": "foo"
}, {
"id": 789,
"key": "bar"
}]
}
您可以尝试使用以下脚本
我故意格式化 inline
属性以显示里面的内容。
POST index_name/_update_by_query
{
"search": {
"term": {
"items.key": "foo"
}
},
"script": {
"inline": "
if (ctx._source.items instanceof List) {
for (item in ctx.source.items) {
if (item.key == params.old_value) {
item.key = params.new_value;
break;
}
}
} else {
ctx._source.items.key = params.new_value;
}
",
"params": {"old_value": "foo", "new_value": "bar"},
"lang": "painless'
}
}
要使其正常工作,请将 inline
属性替换为单行值。
"inline": "if (ctx._source.items instanceof List) {for (item in ctx.source.items) {if (item.key == params.old_value) {item.key = params.new_value;break;}}} else {ctx._source.items.key = params.new_value;}"
如何使用字段映射更新文档 Object(multi=True)
,
当文档可以同时具有单个值(字典)和多个值(字典列表)时。
同一索引中的文档示例:
items
中的单个值:
{
"title": "Some title",
"items": {
"id": 123,
"key": "foo"
}
}
items
中的多个值:
{
"title": "Some title",
"items": [{
"id": 456,
"key": "foo"
}, {
"id": 789,
"key": "bar"
}]
}
您可以尝试使用以下脚本
我故意格式化 inline
属性以显示里面的内容。
POST index_name/_update_by_query
{
"search": {
"term": {
"items.key": "foo"
}
},
"script": {
"inline": "
if (ctx._source.items instanceof List) {
for (item in ctx.source.items) {
if (item.key == params.old_value) {
item.key = params.new_value;
break;
}
}
} else {
ctx._source.items.key = params.new_value;
}
",
"params": {"old_value": "foo", "new_value": "bar"},
"lang": "painless'
}
}
要使其正常工作,请将 inline
属性替换为单行值。
"inline": "if (ctx._source.items instanceof List) {for (item in ctx.source.items) {if (item.key == params.old_value) {item.key = params.new_value;break;}}} else {ctx._source.items.key = params.new_value;}"