当前位置: 首页 > 知识库问答 >
问题:

如何在ElasticSearch聚合中包含所有文档并避免sum\u other\u doc\u count>0

慕兴平
2023-03-14

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\u other\u doc\u count”:值大于零。

我的问题是:有没有一种方法可以构建搜索,以便包含所有文档?文档的数量相当少,通常低于1k,

先谢谢你,鲁文

共有2个答案

柴宏阔
2023-03-14

将术语agg的size从默认10增加到较大的数字:

...
    "by_date": {
      "terms": {
        "field": "date",
        "order": {
          "_term": "asc"
        },
        "size": 1000           <-----
      }
...
徐茂材
2023-03-14

根据文件,

size默认为10

fromsize不能超过index.max_result_window索引设置,默认为10000。

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

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

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

...

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

...

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

要了解更多信息,您可以参考此官方文件

 类似资料:
  • 我有两个集合A和B,我在另一个集合B中有一个字段的引用,因此将两个结果聚合到: 集合A中的文件是:

  • 问题内容: 我想替换所有我的Elasticsearch索引文档中的单个用户名。是否有API查询? 我尝试搜索多个但找不到。有人知道吗? 我的情况: 我在名为“ test”的索引中具有上述数据,并键入“ movies”。在这里,我想用“ alice”代替所有的“ bob”名称。 谢谢 问题答案: 通过查询更新是解决之道。 注意:请确保启用动态脚本,以使其起作用。

  • 我在这里看到了一些关于如何在合流中包含LaTeX的文档,但查看链接的文档,我不清楚我应该期待什么开箱即用,什么需要Atlassian市场的插件。 例如,我想在汇流文档中包含符号sigma(∑)。查看这个链接,我希望创建希腊文大写字母Sigma,但它给了我一个“wiki标记”条目,而不是内联的latex。你知道我做错了什么吗?

  • 以下弹性文件:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-datehistogram-aggregation.html 如何进行日期范围聚合并显示与相关日期段匹配的所有文档,而不是文档计数。 聚合: 回应: 也许我需要做一些子聚合或其他什么? 有什么想法吗?

  • 问题内容: 我收集了大约1M个文档。每个文档都有属性,我需要在node.js代码中获取所有。 以前我在用 要么 在Node中。 但是随着集合的增长,我开始出现错误:。 现在,我想使用聚合。它消耗大量内存,速度很慢,但是可以,因为我在脚本启动时只需要执行一次。我在Robo 3T GUI工具中尝试了以下操作: 它有效,我想按以下方式在node.js代码中使用它: 但是在Node中,我收到一个错误:。

  • 我正在为我的应用程序使用Spring-data-elasticsearch。我发现Spring在我所有的文档中自动创建动态字段“_class”。我将我的索引配置为严格的dynmac映射。我希望一些属性能动态地从文档/映射中排除该字段。 有什么办法可以做到这一点吗?