Я новичок в Elasticsearch и пытаюсь периодически удалять документы с помощью API _delete_by_query (я полностью понимаю, что мне, вероятно, следует использовать индексы, основанные на времени, чтобы упростить эту задачу, и я буду обновлять структуру индексации в должное время). конечно, но пока мне нужно, чтобы это заработало).
Мой индекс содержит поля с именами ServiceName, message и timestamp (среди прочего), и мое требование довольно простое. Я хочу удалить документы, в которых ServiceName равно определенному значению (myService), сообщение НЕ равно ни одному из двух конкретных значений (Starting* и Finished*, поскольку я хочу сохранить первое и последнее сообщение журнала из любой истории трассировки) и документ старше одного дня. Я использую конечную точку _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
}
}]
}
}
}
Когда я запускаю запрос с помощью API _search, он возвращает данные, которые, как я ожидал, будут удалены, но когда я отправил тот же запрос к _delete_by_query, он удалил документы, которые не возвращались в результатах поиска. Я использую сервис AWS Elasticsearch. Может ли кто-нибудь сказать мне, где я ошибаюсь или это должно работать? Сначала я думал, что это может быть свойство minimum_should_match
, однако документация, похоже, предполагает, что в данном случае это не имеет значения.
...it deleted documents that were returned in the search results
чего вы ожидаете, верно? - person Val   schedule 13.11.2020