【发布时间】:2015-07-22 02:01:48
【问题描述】:
我在使用 Bulk API 更新嵌套文档时不小心创建了一个带有句点的字段。现在,我的文档有一个嵌套文档和一个具有相同结构的字段名称。例如,结构类似如下:
{
"foo":{
"bar": 123
},
"foo.bar": 123
}
当我对我的索引进行查询时,这会导致问题。如何查找具有顶级字段“foo.bar”的文档并删除它们?
【问题讨论】:
标签: elasticsearch
我在使用 Bulk API 更新嵌套文档时不小心创建了一个带有句点的字段。现在,我的文档有一个嵌套文档和一个具有相同结构的字段名称。例如,结构类似如下:
{
"foo":{
"bar": 123
},
"foo.bar": 123
}
当我对我的索引进行查询时,这会导致问题。如何查找具有顶级字段“foo.bar”的文档并删除它们?
【问题讨论】:
标签: elasticsearch
您可以使用partial update call 中的脚本来实现这一点,如下所示:
curl -XPOST http://localhost:9200/myindex/mytype/123/_update -d '{
"script" : "ctx._source.remove(\"foo.bar\")"
}'
更新:如果您需要为所有包含该字段的文档删除该字段,还有另一种使用update-by-query plugin 的解决方案。一口气,您可以指定要更新的文档以及匹配文档中要更新的内容,如下所示:
curl -XPOST localhost:9200/myindex/_update_by_query -d '{
"query" : {
"filtered" : {
"filter" : {
"exists": {"field": "foo.bar"}
}
}
},
"script" : "ctx._source.remove(\"foo.bar\")"
}'
【讨论】: