elasticsearch - Elasticsearch 部分更新 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;}"
推荐阅读
- linux-kernel - CentOS 7 - 在 nvme 设备上从 3.10 内核更新到 5.x 后无法启动
- r - 关于所有列,如何对整个数据框进行排序
- r - 根据多个标准对ggplot中的离散x轴进行排序
- typescript - 如何复制两个接口之间的相似性
- rust - 什么时候可以安全地将引用的生命周期延长到 Arenas?
- c# - 不知道如何在 C# 中使用这个 API
- vb.net - 思科 AnyConnect 的 AddHandler
- ruby-on-rails - 从 shopify_token 和 shopify_domain 开始新的 shopify 会话?
- go - 打开文件太多/运行发出并发请求的 go 程序时没有此类主机错误
- php - 使用 Laravel Maatwebsite 导出到 excel 时缺少数据