【问题标题】:Search/Delete field with period from ElasticSearch when a nested document with same structure exists当存在具有相同结构的嵌套文档时,从 ElasticSearch 中搜索/删除带有句点的字段
【发布时间】:2015-07-22 02:01:48
【问题描述】:

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

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

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

【问题讨论】:

    标签: elasticsearch


    【解决方案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\")"
    }'
    

    【讨论】:

    • 你知道我如何搜索这些文件吗?
    • 我能够使用您之前编写的脚本删除字段。我没有使用 update-by-query 插件,因为 ES 1.6 github.com/yakaz/elasticsearch-action-updatebyquery/issues/38 似乎有问题。总而言之,感谢您的帮助!
    • 您遇到了什么问题?
    • 我没试过。我只是想指出关于 ES 1.6 的插件存在一个未解决的问题。
    猜你喜欢
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 2016-12-08
    • 1970-01-01
    相关资源
    最近更新 更多