Ограничить сборку ElasticSearch для выполнения первых результатов запроса

У меня есть набор из 2,8 миллионов документов с наборами тегов, которые я запрашиваю с помощью ElasticSearch, но многие из этих документов могут быть сгруппированы вместе одним ID. Я хочу запросить мои данные с помощью тегов, а затем объединить их по идентификатору, который повторяется. Часто мои результаты поиска содержат десятки тысяч документов, но я хочу только собрать 100 лучших результатов поиска. Как я могу скрыть агрегацию только к 100 результатам из запроса?

12
06 марта '15 в 12:42
источник поделиться
3 ответов

Агрегирование сэмплеров:

Агрегация фильтрации, используемая для ограничения обработки любых подкатегорий к образцу документов с наивысшим рейтингом.

"aggs": {
     "bestDocs": {
         "sampler": {
          //    "field": "<FIELD>", <-- optional, Controls diversity using a field
              "shard_size":100
         },
         "aggs": {
              "bestBuckets": {
                 "terms": {
                      "field": "id"
                  }
               }
         }
      }
  }

Этот запрос ограничит суб-агрегацию до 100 документов из результата, а затем выполнит их по идентификатору.

При желании вы можете использовать настройки field or script and max_docs_per_value для управления максимальным количеством документов, собранных на любом осколке, который имеет общее значение.

3
13 марта '16 в 17:36
источник

Параметр размер может быть установлен для определения того, сколько терминов ведра должны быть возвращены из общего списка терминов.

По умолчанию команда node, координирующая процесс поиска, будет запрашивать каждый осколок, чтобы предоставить свои собственные ведро с верхними размерами, и после того, как все отклики будут реагировать, это уменьшит результаты до окончательного списка, который затем будет возвращен клиенту. Это означает, что, если число уникальных терминов больше размера, возвращаемый список немного выключен и не точным (может быть, что термин "счет" немного выключен, и даже может быть, что термин, который должен был быть в верхнем размере ведра не были возвращены).

Если установлено значение 0, размер будет установлен на Integer.MAX_VALUE.

Вот пример кода для возврата top 100:

{
"aggs" : {
    "products" : {
        "terms" : {
            "field" : "product",
            "size" : 100
                  }
                 }
         }
}

Вы можете обратиться к this для получения дополнительной информации.

0
06 марта '15 в 13:15
источник

Вы можете использовать параметр min_doc_count

{
"aggs" : {
    "products" : {
        "terms" : {
            "field" : "product",
            "min_doc_count" : 100
                  }
                 }
         }
}
-2
21 февр. '16 в 3:44
источник

Посмотрите другие вопросы по меткам или Задайте вопрос