首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有高级别java客户端Elasticsearch的同一级别的多个聚合

具有高级别java客户端Elasticsearch的同一级别的多个聚合
EN

Stack Overflow用户
提问于 2019-12-09 20:42:19
回答 1查看 1.6K关注 0票数 0

如何使用高级java客户端将具有相同级别的多个聚合的dsl查询转换为java?

代码语言:javascript
运行
复制
{

"size": 0,
"aggs": {
    "by_time": {
        "max": {
            "field": "updated_ts"
        }
    },
    "by_question": {
        "value_count": {
            "field": "questions.question.keyword"
        }
    },
    "by_score": {
        "filter": {
            "term": {
                "score": 100
            }
        }
    }
}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-09 21:00:45

嗨,如果您使用ES版本6.8或较小的,请尝试使用此代码

代码语言:javascript
运行
复制
        MaxAggregationBuilder by_time = AggregationBuilders
                .max("by_time")
                .field("updated_ts");

        ValueCountAggregationBuilder by_question = AggregationBuilders
                .count("by_question")
                .field("questions.question.keyword");

        ValueCountAggregationBuilder by_view = AggregationBuilders
                .count("by_view")
                .field("questions.viewStats.name.keyword");

        FilterAggregationBuilder by_score = AggregationBuilders
                .filter("by_score", QueryBuilders.termQuery("score",100));

        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        //Setting aggregation to search request
        sourceBuilder.aggregation(by_time);
        sourceBuilder.aggregation(by_question);
        sourceBuilder.aggregation(by_view);
        sourceBuilder.aggregation(by_score);
        //To avoid fetching docs
        sourceBuilder.size(0);

        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices(MODEL_INDEX_NAME);
        searchRequest.source(sourceBuilder);

        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

        //For getting result from aggregations
        //Refer: https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/_structuring_aggregations.html

        Max byTimeAggregationResult = searchResponse.getAggregations().get("by_time");
        double byTimeMaxValue = byTimeAggregationResult.getValue();

        ValueCount byQuestionAggregationResult = searchResponse.getAggregations().get("by_question");
        long byQuestionCount = byQuestionAggregationResult.getValue();

        ValueCount  byViewAggregationResult = searchResponse.getAggregations().get("by_view");
        long byViewCount = byViewAggregationResult.getValue();

        Filter byScoreAggregationResult = searchResponse.getAggregations().get("by_score");
        long byScoreDocCount = byScoreAggregationResult.getDocCount();

        System.out.println("byTimeMaxValue: "+byTimeMaxValue);
        System.out.println("byQuestionCount: "+byQuestionCount);
        System.out.println("byViewCount: "+byViewCount);
        System.out.println("byScoreDocCount: "+byScoreDocCount);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59256278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档