猿问

计算弹性搜索中的不同值

我的数据库中有重复的 id,并希望获得仅类似于 SQL 中的 SELECT COUNT(DISTINCT column) FROM table 的不同值的计数。


public SearchSourceBuilder createQueryForCount(QueryBuilder queryBuilder, int start, boolean fetchSource, String field){

        logger.info("Creating aggregation count ");


        QueryBuilder finalQuery = QueryBuilders.boolQuery().must(queryBuilder);


        AggregationBuilder aggregationCount = AggregationBuilders.terms("agg").field(USER_ID)

                .subAggregation(AggregationBuilders.topHits("top").explain(false).from(start))

                .subAggregation(AggregationBuilders.count("count").field(field));


        return new SearchSourceBuilder()

                .query(finalQuery)

                .fetchSource(fetchSource)

                .from(start)

                .aggregation(aggregationCount);


    }

有没有办法在弹性搜索中进行不同的计数?


繁星淼淼
浏览 137回答 2
2回答

守着星空守着你

您应该寻找基数聚合。此处提供了Javadoc 。另外,请记住 elasticsearch 使用近似值来权衡性能。您可以在一定程度上使用 precision_threshold 来控制它。此处提供了很好的解释。

倚天杖

要在弹性搜索中获得不同的值计数,请使用基数聚合。
随时随地看视频慕课网APP

相关分类

Java
我要回答