#amazon-web-services #elasticsearch #amazon-elasticsearch
#amazon-web-services #elasticsearch #amazon-elasticsearch
Вопрос:
Я довольно новичок в Elasticsearch и пытаюсь периодически удалять документы, используя API _delete_by_query (я полностью понимаю, что, вероятно, мне следует использовать индексы, основанные на времени, чтобы упростить это, и со временем я обновлю структуру индексации, но сейчас мне нужно заставить это работать).
Мой индекс содержит поля, называемые ServiceName, message и timestamp (среди прочих), и мое требование довольно простое. Я хочу удалить документы, в которых ServiceName равно определенному значению (MyService), сообщение НЕ равно ни одному из двух определенных значений (начиная * и заканчивая *, поскольку я хочу сохранить первое и последнее сообщение журнала из любой истории трассировки), а возраст документа превышает один день. Я использую конечную точку _delete_by_query со следующей полезной нагрузкой:
{
"query": {
"bool": {
"must": [],
"filter": [{
"match_all": {}
},
{
"match_phrase": {
"ServiceName": {
"query": "myService"
}
}
},
{
"range": {
"@timestamp": {
"lte": "now-1d"
}
}
}
],
"should": [],
"must_not": [{
"bool": {
"should": [{
"match_phrase": {
"message": "Starting*"
}
},
{
"match_phrase": {
"message": "Finished*"
}
}
],
"minimum_should_match": 1
}
}]
}
}
}
Когда я запускаю запрос с помощью _search API, он возвращает данные, которые я ожидал удалить, но когда я отправил тот же запрос в _delete_by_query, он удалил документы, которые не были возвращены в результатах поиска. Я использую сервис AWS Elasticsearch. Кто-нибудь может сказать мне, где я ошибаюсь, или это должно сработать? Изначально я думал, что это может быть minimum_should_match
свойство, однако документация, похоже, предполагает, что в данном случае это не имеет значения
Комментарии:
1.
...it deleted documents that were returned in the search results
чего вы ожидаете, верно?2. Ха — там опечатка. Он удалил документы, которые не были возвращены результатами поиска, вот что я должен был сказать. Будет редактировать
3. Хорошо, так логичнее;-) Я нахожу это очень удивительным… Сколько результатов вы получаете для поискового запроса? и сколько из них было фактически удалено с помощью одного и того же запроса?
4. Хм, может быть, я действительно сделал что-то не так. Я попробую еще раз, так как я тоже был удивлен. Мы говорим о 20 миллионах документов, поскольку они накапливаются с течением времени
5. Спасибо всем за комментарии — я переработал стратегию индексации для использования индексов на основе даты, поэтому очистка старых данных теперь является простым случаем удаления индекса
Ответ №1:
Это странно. Можете ли вы проверить, одинаковое ли количество обращений или нет? Результаты поиска в kibana усекаются, что может быть причиной того, что определенные документы не отображаются в результатах поиска, а отображаются в удаленных документах.
Если это не так, было бы здорово, если бы вы могли поделиться образцом двух документов.
- Документ A: отображается в поиске, а также удаляется.
- Документ B: отсутствует в поиске, но удаляется.
Это поможет воспроизвести проблему с моей стороны и вернуться к вам.