首页 > 解决方案 > 有没有一种方法可以选择 n 个存储桶,并应用存储桶的 doc_count 的范围过滤器以“即时”跳过存储桶

问题描述

事实

  1. 我们有约 1,000 万家公司发布的约 8,500 万份文件(索引大小为 93GB)
  2. 一家公司创建一个桶,因此大约有 1000 万个桶。

什么效果好

当通过对 company 字段使用 termAggregation 进行聚合时,返回结果没有问题,首先列出与用户输入的某些条件匹配的大多数文档的公司。1000 个桶中前 6 个的示例 doc_counts(设置了 size=1000)

什么不起作用

仅选择具有某些最大和最小大小的存储桶(例如,最小:31000,最大:32000)。这在 termAggregation 级别上无法实现,因为此选项不可用。

termAggregation 的唯一选项是“min_doc_count”,但没有“max_doc_count”。

更新:我已经在 ElasticSearch 的 github 上使用此功能创建了 PR(WIP)

不是解决方案

  1. 此处不能使用桶选择聚合,因为总桶大小太大(超过 1000 万家公司 - 应考虑所有桶)。想象一下我们需要选择 100-1000 范围内的存储桶(比最大的存储桶更频繁)的场景。
  2. 无法使用具有预聚合计数的辅助索引,因为可以同时应用多个其他过滤器(例如,国家:美国,类别:红色等)

标题中的问题:有没有办法使用范围过滤器为桶的 doc_count 选择 1000 个桶,以“即时”跳过桶的方式应用

虚构的聚合 bulid:

termAgregation("companies", "company").size(10).minDocCount(100).maxDocCount(1000)

标签: elasticsearchelasticsearch-aggregationelasticsearch-7

解决方案


推荐阅读