#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 документ соответствует его критериям, и этот документ также обновляется, можете ли вы перепроверить свой скрипт и запрос и посмотреть, соответствует ли он всем вашим ожидаемым документам, если нет, то вам нужно правильно его сконструировать, чтобы обновить все документы, соответствующие вашим критериям.