Elasticsearch - удалить поле из структуры - PullRequest
1 голос
/ 29 октября 2019

Я использую 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 ]

1 голос
/ 29 октября 2019

Таким способом можно удалить поле из всех существующих документов,

POST test_idx1/_update_by_query?conflicts=proceed
{
    "script" : "ctx._source.struct1.remove('inner_field1')",
    "query" : {
        "exists": { "field": "struct1.inner_field1" }
    }
}
0 голосов
/ 29 октября 2019

Вы можете сделать это в два этапа:

GET test_idx1/_doc/1

Затем пропустите struct1 с удалением inner_field1 как частичное обновление документа:

POST test_idx1/_update/1
{
    "doc" : {
        "struct1" : {
            "inner_field2" : "inner val2",
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...