В elasticsearch есть индекс лога.
Делаю запрос с агрерацией и последующей фильтрацией с помощью
bucket_selector
(нужны ID приложений, которые отправили "событие1", но не отправили "событие2").
Получаю список id вот в таком виде:
{
"took" : 77,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3882,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"instance_id" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : 3624,
"doc_count" : 1,
"download" : {
"doc_count" : 1,
"unique_count" : {
"value" : 1
}
},
"launch" : {
"doc_count" : 0,
"unique_count" : {
"value" : 0
}
}
},
{
"key" : 3619,
"doc_count" : 1,
"download" : {
"doc_count" : 1,
"unique_count" : {
"value" : 1
}
},
"launch" : {
"doc_count" : 0,
"unique_count" : {
"value" : 0
}
}
},
...
{
"key" : 3388,
"doc_count" : 1,
"download" : {
"doc_count" : 1,
"unique_count" : {
"value" : 1
}
},
"launch" : {
"doc_count" : 0,
"unique_count" : {
"value" : 0
}
}
}
]
}
}
}
и теперь мне надо сделать выборку всех документов со всеми полями с фильтрацией по найденным id (3624, 3619, ... 3388)
Можно, конечно, собрать их скриптом и выполнить еще один запрос, но, возможно, есть способ как-то использовать эти результаты в одном запросе?
Грубо говоря, мне надо выполнить вот такой запрос:
{
"query": {
"bool": {
"must": [
{"terms":{"instance_id": [3624, 3619, ..., 3388]}},
{"term":{"name": "download"}}
]
}
}
}
Как это можно сделать?