У меня есть набор из 2,8 миллионов документов с наборами тегов, которые я запрашиваю с помощью ElasticSearch, но многие из этих документов могут быть сгруппированы вместе одним ID. Я хочу запросить мои данные с помощью тегов, а затем объединить их по идентификатору, который повторяется. Часто мои результаты поиска содержат десятки тысяч документов, но я хочу только собрать 100 лучших результатов поиска. Как я могу скрыть агрегацию только к 100 результатам из запроса?
Ограничить сборку ElasticSearch для выполнения первых результатов запроса
Ответ 1
Агрегация фильтрации, используемая для ограничения обработки любых подкатегорий к образцу документов с наивысшим рейтингом.
"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
для управления максимальным количеством документов, собранных на любом осколке, который имеет общее значение.
Ответ 2
Параметр размер может быть установлен для определения того, сколько терминов ведра должны быть возвращены из общего списка терминов.
По умолчанию команда node, координирующая процесс поиска, будет запрашивать каждый осколок, чтобы предоставить свои собственные ведро с верхними размерами, и после того, как все отклики будут реагировать, это уменьшит результаты до окончательного списка, который затем будет возвращен клиенту. Это означает, что, если число уникальных терминов больше размера, возвращаемый список немного выключен и не точным (может быть, что термин "счет" немного выключен, и даже может быть, что термин, который должен был быть в верхнем размере ведра не были возвращены).
Если установлено значение 0, размер будет установлен на Integer.MAX_VALUE
.
Вот пример кода для возврата top 100:
{
"aggs" : {
"products" : {
"terms" : {
"field" : "product",
"size" : 100
}
}
}
}
Вы можете обратиться к this для получения дополнительной информации.
Ответ 3
Вы можете использовать параметр min_doc_count
{
"aggs" : {
"products" : {
"terms" : {
"field" : "product",
"min_doc_count" : 100
}
}
}
}