Как вставить новый узел в эластичный вложенный атрибут

0

Вопрос

Я описываю суть моей проблемы. У меня есть это отображение индекса:

{
    "properties": {
        "level_l": {
            "type": "nested",
            "properties": {
                "level_2-1": {
                    "type": "keyword"
                },
                "level_2-2":{
                    "type": "nested",
                    "properties": {
                        "level_3-1": {
                            "type": "keyword"
                        },
                        "level_3-2": {
                            "type": "keyword"
                        },
                        "level_3-3": {
                            "type": "keyword"
                        }
                    }
                }
            }
        }
    }
}

И добавление этих документов:

{
    "level_1": [
        {
            "level_2-1": "a",
            "level_2-2": [
                {
                    "level_3-1": "c1",
                    "level_3-2": "c2",
                    "level_3-3": "c3"
                }
            ]
        },
        {
            "level_2-1": "b",
            "level_2-2": [
                {
                    "level_3-1": "c1",
                    "level_3-2": "c2",
                    "level_3-3": "c3"
                }
            ]
        }
    ]
}

Мне нужно добавить новый узел в level_2-2, когда level_2-1 = a. Я попробовал это, используя в качестве руководства заметки из https://iridakos.com/programming/2019/05/02/add-update-delete-elasticsearch-nested-objects но я так и не смог этого сделать.

Есть какие-нибудь идеи?

1

Лучший ответ

0

Как показано в учебнике, который вы связали, вам понадобится идентификатор объекта, который вы хотите изменить. Беря пример оттуда:

POST iridakos_nested_objects/human/1/_update
{
  "script": {
    "source": "ctx._source.cats.add(params.cat)",
    "params": {
      "cat": {
        "colors": 4,
        "name": "Leon",
        "breed": "Persian"
      }
    }
  }
}

В приведенном выше примере 1-это идентификатор записи. Вам нужно будет заменить его записью, которую вы хотите изменить.

В случае, если вы хотите изменить все записи, вам потребуется использовать API update_by_query. Сопоставив этот пример с приведенным выше руководством, он будет выглядеть следующим образом:

POST INDEX_NAME_HERE/_update_by_query
{
  "script": {
    "source": "ctx._source.cats.add(params.cat)",
    "params": {
      "cat": {
        "colors": 4,
        "name": "Leon",
        "breed": "Persian"
      }
    }
  },
  "query": {
    "match_all": {}
  }
}

В этом случае вам потребуется обновить часть запроса (в конце), чтобы она соответствовала всем записям, которые вы хотите обновить. Я предполагаю, что вы, вероятно, хотели бы запросить вложенный объект, хотя это не видно из вашего вопроса.

2021-11-22 13:11:25

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

Популярное в этой категории

Популярные вопросы в этой категории