【问题标题】:How to get the total documents count, containing a specific field, using aggregations?如何使用聚合获取包含特定字段的总文档数?
【发布时间】:2016-04-11 21:46:51
【问题描述】:

我正在从 ElasticSearch 1.7 迁移到 2.0。以前在计算 Term Facets 时,我也得到了 Total Count。这将告诉该字段存在多少文档。这就是我之前的做法。

TermsFacet termsFacet = (TermsFacet) facet;
termsFacet.getTotalCount();

它也适用于多值字段。

现在在术语聚合的当前版本中,我们没有任何东西作为总计数。我在聚合存储桶中获取 DocCount。但这不适用于多值字段。

Terms termsAggr = (Terms) aggr;
for (Terms.Bucket bucket : termsAggr.getBuckets()) {
                    String bucketKey = bucket.getKey();
                    totalCount += bucket.getDocCount();
 }

有什么方法可以从术语聚合中获取字段的总数。 我不想触发存在过滤器查询。我想要单个查询的结果。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    我会使用存在查询: https://www.elastic.co/guide/en/elasticsearch/reference/2.x/query-dsl-exists-query.html

    例如查找包含您可以使用的字段用户的文档:

    {
        "exists" : { "field" : "user" }
    }
    

    当然还有一个java API: https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-term-level-queries.html#java-query-dsl-exists-query

    QueryBuilder qb = existsQuery("name"); 
    

    【讨论】:

    • 我认为 OP 提到他不想使用“存在查询”。是否有任何相关的聚合来实现相同的目标?我认为“TermsFacet”过去常常提供所需的值,但 ES 不再支持构面。
    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 2021-10-08
    • 2021-03-01
    • 2019-07-06
    相关资源
    最近更新 更多