Идея этого состоит в том, чтобы создать один запрос и разбить результат на отдельные сегменты, в которых вы можете использовать статистический анализ результата, используя безболезненно.
{
"trigger": ...,
"input": {
"search": {
"request": {
"search_type": "query_then_fetch",
"indices": [
...
],
"types": [],
"body": {
"query": {
"bool": {
"should": [
{
"query_string": {
"query": "Successful",
"default_field": "message"
}
},
{
"query_string": {
"query": "Failed",
"default_field": "message"
}
}
]
}
},
"aggs": {
"messages": {
"filters": {
"other_bucket_key": "successful_requests",
"filters": {
"failed_requests": {
"bool": {
"must": [
{
"query": {
"query_message": "Failed",
"default_field:"message"
}
}
]
}
}
}
}
}
}
}
}
}
},
"condition": {
"script": {
"source": "return ctx.payload.aggregations.messages.buckets.failed_request.doc_count/ctx.payload.aggregations.messages.buckets.successful_request.doc_count > ctx.metadata.thresholdPercent",
"lang": "painless"
}
},
"actions": ...
},
"metadata": {
"thresholdPercent": 0.5
}
}
В этом примере вынайдите «Не удалось или успешно», затем разбейте этот результат на 2 сегмента.Одно из этих сегментов неявно, в то время как блок "failed_request" получает все результаты, соответствующие запросу "Failed".В этом условии вы можете использовать безболезненно и определить, превышает ли количество документов для успешных запросов установленный порог.Документацию по агрегатам ковшей фильтров можно найти: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filters-aggregation.html