当存在具有相同结构的嵌套文档时,使用ElasticSearch的句点搜索/删除字段

时间:2015-07-21 17:36:04

标签: elasticsearch

我不小心创建了一个字段,其中包含使用Bulk API更新嵌套文档的句点。现在,我的文档有一个嵌套文档和一个具有相同结构的字段名称。例如,结构类似于以下内容:

{
  "foo":{
    "bar": 123
  },
  "foo.bar": 123
}

当我对索引进行查询时,这会导致问题。如何使用顶级字段“foo.bar”查找文档并删除它们?

1 个答案:

答案 0 :(得分:1)

您可以使用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\")"
}'