首页 > 解决方案 > 在 ElasticSearch 中使用 JAVA API 获取聚合函数的空值

问题描述

我正在学习 ElasticSearch 并创建了一个 sdk 来在 ES 中搜索数据。我可以通过简单的搜索来检索数据,但是当我使用 avg 和 count 之类的聚合函数时,它会为聚合函数返回空值。下面是我的代码:

   try(RestHighLevelClient client =  ElasticSearchClient.client(url,port)) {
                SearchRequest searchRequest = new SearchRequest(index.toLowerCase().trim());
                SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
                BoolQueryBuilder boolQuery = new BoolQueryBuilder();
                for (Map.Entry<String,String> data: details.entrySet()){
                    boolQuery.must(matchQuery(data.getKey(),data.getValue()));

                }

                searchSourceBuilder.query(boolQuery);
                if(limit>0) {
                    searchSourceBuilder.from(0);
                    searchSourceBuilder.size(limit);
                }

                searchSourceBuilder.aggregation(AggregationBuilders.avg("averageTime").field("executionTimeInSeconds"));
                searchSourceBuilder.aggregation(AggregationBuilders.count("noOfTimesApiUsed").field("serviceName"));
                searchRequest.source(searchSourceBuilder);
                searchRequest.scroll(new TimeValue(60000));//in millisecond
                searchRequest.searchType(SearchType.DFS_QUERY_THEN_FETCH);
                response = client.search(searchRequest, RequestOptions.DEFAULT);
                sourceList = new ArrayList<>();
                for (SearchHit hits: response.getHits()) {
                    String source = hits.getSourceAsString();
                    sourceList.add(source);
                }
                Logger.log("Final Response :", sourceList.toString());

我不明白代码中有什么问题。请帮忙。

标签: elasticsearchjava

解决方案


推荐阅读