Elasticsearch-从结构中删除字段

时间:2019-10-29 15:56:51

标签: elasticsearch elasticsearch-painless

我正在使用Elasticsearch 6.5。
假设我的Elasticsearch文档如下所示:

"_source" : {
    "field1" : "val1",
    "field2" : "val2",
    "struct1" : {
      "inner_field1" : "inner val1",
      "inner_field2" : "inner val2",
    }
  }

我想删除此结构中的一个内部字段。
我尝试了以下代码:

POST test_idx1/_doc/1/_update
{
 "script": "ctx._source.remove('struct1.inner_field1');"
}

,结果显示updated,但没有任何变化。
如何执行这样的动作?

2 个答案:

答案 0 :(得分:1)

您可以通过这种方式从所有现有文档中删除字段

POST test_idx1/_update_by_query?conflicts=proceed
{
    "script" : "ctx._source.struct1.remove('inner_field1')",
    "query" : {
        "exists": { "field": "struct1.inner_field1" }
    }
}

答案 1 :(得分:0)

您可以分两个步骤进行操作:

GET test_idx1/_doc/1

然后将struct1移至inner_field1,作为部分文档更新:

POST test_idx1/_update/1
{
    "doc" : {
        "struct1" : {
            "inner_field2" : "inner val2",
        }
    }
}