#elasticsearch
#elasticsearch
Вопрос:
{
"query": {
"filtered": {
"query": {
"match": {
"log_path": "message_notification.log"
}
},
"filter": {
"numeric_range": {
"time_taken": {
"gte": 10
}
}
}
}
},
"aggs": {
"distinct_user_ids": {
"cardinality": {
"field": "user_id"
}
}
}
}
Я должен выполнить этот запрос 20 раз, так как я хочу знать время уведомления выше каждого из следующих пороговых значений- [10,30,60,120,240,300,600,1200..]
. Прямо сейчас я запускаю цикл и делаю 20 запросов для получения этого.
Есть ли более разумный способ запросить elasticsearch один раз и получить диапазоны, которые попадают в эти пороговые значения соответственно?
Ответ №1:
Вероятно, вам нужна «агрегация диапазонов«.
Вот возможный запрос, в котором вы можете добавить больше диапазонов или изменить их —
{
"size": 0,
"query": {
"match": {
"log_path": "message_notification.log"
}
},
"aggs": {
"intervals": {
"range": {
"field": "time_taken",
"ranges": [
{
"to": 50
},
{
"from": 50,
"to": 100
},
{
"from": 100
}
]
},
"aggs": {
"distinct_user_ids": {
"cardinality": {
"field": "user_id"
}
}
}
}
}
}