ElasticSearch Java列出字段的唯一值

时间:2018-09-21 15:39:21

标签: java spring-boot elasticsearch elasticsearch-aggregation elasticsearch-6

您好,我是弹性搜索的新手,却没有在Java中进行操作,我在所有地方都尝试使用谷歌搜索卷毛解决方案,而且在从curl转换为java时不太舒服。 我想列出一个字段的唯一值,并且正在使用elasticseach6.1.2和RestHighLevelClient,到目前为止,我的代码是:

    SearchRequest searchRequest = new SearchRequest(INDEX);
    searchRequest.types(TYPE);          
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(QueryBuilders.matchAllQuery());
    AggregationBuilder aggregation=AggregationBuilders.missing("agg").field("source");
    searchSourceBuilder.aggregation(aggregation);
    searchRequest.source(searchSourceBuilder);
    SearchResponse searchResponse =restHighLevelClient.search(searchRequest);
    Aggregation aggrega = searchResponse.getAggregations().get("source");
    StringTerms st = (StringTerms) aggrega;
    System.out.println(searchResponse);

这里有一个名为source的字段,我想用名称source列出该字段的唯一值,这段代码将返回5行,所有字段肯定是完全错误的。

1 个答案:

答案 0 :(得分:0)

尝试使用弹性版本6.x

    SearchRequest searchRequest = new SearchRequest(INDEX);
    searchRequest.types(TYPE);          
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(QueryBuilders.matchAllQuery());

    AggregationBuilder aggregation=AggregationBuilders.terms("source_aggs")
                .field("source.keyword").size(size)
                .order(BucketOrder.count(isAscending));

    searchSourceBuilder.aggregation(aggregation);

    searchRequest.source(searchSourceBuilder);
    SearchResponse searchResponse =restHighLevelClient.search(searchRequest);
    Aggregation aggrega = searchResponse.getAggregations().get("source_aggs");
    StringTerms st = (StringTerms) aggrega;
    System.out.println(searchResponse);