elasticsearch updateByQuery не обновляется, но возвращает 200

#elasticsearch

#эластичный поиск

Вопрос:

Я использую клиент elasticsearch js, и я хочу найти все поля с помощью attrs.tags == XXX и удалить значение. Обновление возвращает 200 и 1 событие обновлено правильно. Но когда я перечисляю все события, я все еще вижу attrs.tags со старым значением. Почему это не работает? Даже если я подожду 5 минут, чтобы дать эластичному времени на его обновление, я все равно получу тот же результат.

  async function search() {
        var tag = req.body.tags;
        var client = connectToES(res);
        const response = await client.updateByQuery({
            index: "*",
            type: '_doc',
            body: {
                "query": {
                    "match": {
                        "attrs.tags": tag
                    }
                },
                "script": { "inline": "ctx._source.attrs.tag = ''" }
            }
        });

        client.close();
    }
 

А вот и упругий отклик:

{"took":34,"timed_out":false,"total":1,"updated":1,"deleted":0,"batches":1,"version_conflicts":0,"noops":0,"retries":{"bulk":0,"search":0},"throttled_millis":0,"requests_per_second":-1,"throttled_until_millis":0,"failures":[]}

Комментарии:

1. Проблема заключалась в том, что теги полей были массивом, а не строкой. Обновление по некоторым причинам не сработало.

Ответ №1:

Ваш ответ ES кажется нормальным, и в нем точно указано, что всего 1 документ соответствует его критериям, и этот документ также обновляется, можете ли вы перепроверить свой скрипт и запрос и посмотреть, соответствует ли он всем вашим ожидаемым документам, если нет, то вам нужно правильно его сконструировать, чтобы обновить все документы, соответствующие вашим критериям.