2

在探索 elasticsearch 中的聚合时,我发现聚合功能可以通过基于 HTTP 的 JEST 客户端中的 JSON 查询来实现,但不能在基于 TCP 的 Java 客户端中实现。

我正在使用 Jest Client 并通过运行良好的查询字符串实现聚合。但我觉得随着过滤器的增加,它变得非常麻烦。我想知道除了在 JEST 客户端中使用 JSON 查询(​​类似于 TCP 客户端中的聚合构建器)之外,是否有其他方法可以实现聚合,我们如何实现它?

4

2 回答 2

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);
于 2018-02-07T16:06:25.953 回答
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并稍微简化了示例。

于 2019-01-26T07:41:48.410 回答