在探索elasticsearch中的聚合时,我发现聚合功能可以通过基于HTTP的JEST客户端中的JSON查询实现,但不能在基于TCP的Java客户端中实现。
我正在使用Jest Client并通过查询字符串实现聚合,工作正常。但随着过滤器的增加,我觉得它变得很安静。 我想知道是否有一种方法可以实现聚合,而不是在JEST客户端中使用JSON查询(类似于TCP客户端中的聚合构建器)以及我们如何实现它?
答案 0 :(得分:0)
这是我实现聚合的解决方案,不要忘记先添加查询。
org.elasticsearch.search.builder.SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
TermsAggregationBuilder termsAggregationBuilder =
AggregationBuilders.terms(fieldName).field("keyword");
termsAggregationBuilder.minDocCount(minDocCount);
termsAggregationBuilder.size(size);
searchRequestBuilder.aggregation(termsAggregationBuilder);
Search search = new io.searchbox.core.Search.Builder(searchSourceBuilder.toString())
.addIndex(indexNameBuilder.getIndexName(searchContext.getCompanyId()))
.build();
SearchResult result = jestConnectionManager.getClient().execute(search);
答案 1 :(得分:0)
这就是我的目标:
SearchSourceBuilder searchBuilder = SearchSourceBuilder
.searchSource()
.size(0)
.query(QueryBuilders.termQuery("field", "my value"))
.aggregation(
AggregationBuilders
.sum("number_field_sum")
.field("number_field")
);
Search search = new Search.Builder(searchBuilder.toString())
.addIndex("my-index")
.build();
SearchResult result = jestClient.execute(search);
这与您想出的基本相同,但是我将查询放入SearchSourceBuilder
中,并对示例进行了简化。