如何将所有文档包含在 ElasticSearch 聚合中并避免 sum_other_doc_count > 0

Reu*_*bin 5 elasticsearch elasticsearch-aggregation

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"
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我对https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html的理解是,并非所有文档都包含在聚合中。事实上,根据查询部分,我确实在结果中看到“sum_other_doc_count”:值大于零。

我的问题:有没有办法构建搜索以包含所有文档?文档数量相当少,通常在1k以下,

预先感谢,鲁文

ESC*_*der 8

根据文件

size默认为 10

from+size不能大于index.max_result_window索引设置,默认为 10,000。

在您的情况下,文档相当小,接近 1k,因此可以轻松检索 1k 结果。

可以设置大小参数来定义应从整个术语列表中返回多少个术语桶。默认情况下,协调搜索过程的节点将请求每个分片提供其自己的最大大小术语存储桶,一旦所有分片响应,它会将结果减少到最终列表,然后将其返回给客户端。

因此,需要在字段日期中包含前 1000 个文档。

...

"by_date": {
  "terms": {
    "field": "date",
    "order": {
      "_term": "asc"
    },
    "size": 1000
  }
}
Run Code Online (Sandbox Code Playgroud)

...

请求的大小越高,结果就越准确,但计算最终结果的成本也越高

想了解更多,可以参考这个官方文档