@Fly3110
web developer

Как в elasticsearch использовать результаты фильтрации bucket_selector в качестве фильтра?

В 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"}}
      ]
    }
  }
}


Как это можно сделать?
  • Вопрос задан
  • 38 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
SpectrumData Екатеринбург
от 300 000 до 400 000 ₽
LIME Москва
от 280 000 до 350 000 ₽
24 нояб. 2024, в 23:46
20000 руб./за проект
24 нояб. 2024, в 23:07
2000 руб./за проект