Обновить Elasti c поиск значения вложенного индекса - PullRequest
1 голос
/ 16 апреля 2020

У меня был индекс в поиске elasti c, который имеет вложенные значения, я хочу обновить значение во вложенном индексе с помощью Id, как мне этого добиться. Мой индекс как

{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": 1.0,
        "hits": [
            {
                "_index": "a",
                "_type": "a1",
                "_id": "my-index1",
                "_score": 1.0,
                "_source": {
                    "id": "my-index1",
                    "name": "firstIndex",
                    "metals": [
                        {
                            "id": "123",
                            "name": "Ronni",   
                        },
                         {
                            "id": "124",
                            "name": "Ross",   
                        }
                    ]
                }
            }
        ]
    }
}

Как обновить "Росс" с "Моникой" с помощью "Id" -124?

1 Ответ

1 голос
/ 16 апреля 2020

Предполагая, что ваш metals имеет тип данных nested (и не является просто тривиально вложенным массивом), вы можете сначала ограничить документы для обновления, используя вложенный запрос запроса и затем используйте зацикленный скрипт для выполнения ваших изменений:

POST my-index1/_update_by_query
{
  "query": {
    "nested": {
      "path": "metals",
      "query": {
        "term": {
          "metals.id": "124"
        }
      }
    }
  },
  "script": {
    "source": """
      for (def i = 0; i < ctx._source.metals.length; i++) {
        def group = ctx._source.metals[i];
        if (group['id'] == params['old_metal_id']) {
          ctx._source.metals[i]['name'] = params['new_metal_name']
        }

      }
    """,
    "params": {
      "old_metal_id": "124",
      "new_metal_name": "Monika"
    }
  }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...