Как включить все документы в ElasticSearch Aggregation и избежать sum_other_doc_count> 0 - PullRequest
0 голосов
/ 08 апреля 2020

ES не является основным направлением моей работы, и есть одно поведение, которое я не могу исправить. У меня довольно простой запрос агрегации:

GET /my_index/_search
{
  "size": 0,
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "request_type": "some_type"
          }
        },
        {
          "match": {
            "carrier_name.keyword": "some_carrier"
          }
        }
      ]
    }
  },
  "aggs": {
    "by_date": {
      "terms": {
        "field": "date",
        "order": {
          "_term": "asc"
        }
      },
      "aggs": {
        "carrier_total": {
          "sum": {
            "field": "total_count"
          }
        }
      }
    }
  }
}

Насколько я понимаю из https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html, не все документы включены в агрегацию. Действительно, в зависимости от раздела запроса, я вижу в результатах «sum_other_doc_count»: со значениями больше нуля.

Мой вопрос: есть ли способ построить поиск так, чтобы все документы были включены? Количество документов довольно мало, обычно менее 1 КБ

Заранее спасибо, Реувен

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

В соответствии с документацией ,

size по умолчанию 10

from + size не может быть больше index.max_result_window индексный параметр, который по умолчанию равен 10 000.

В вашем случае документы довольно маленькие, почти 1 КБ, поэтому результаты 1 КБ можно легко получить.

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

Таким образом, должен быть сделан запрос на включение 1000 лучших документов в поле даты.

...

"by_date": {
      "terms": {
        "field": "date",
        "order": {
          "_term": "asc"
        },
        "size": 1000   
}  

...

Чем выше запрашиваемый размер, тем более точными будут результаты, а также тем дороже будет вычислять окончательные результаты

Чтобы узнать больше об этом, вы можете сослаться на это Официальный до c

0 голосов
/ 08 апреля 2020

Увеличьте size слагаемых agg от значения по умолчанию 10 до большого числа i sh:

...
    "by_date": {
      "terms": {
        "field": "date",
        "order": {
          "_term": "asc"
        },
        "size": 1000           <-----
      }
...
...