Search code examples
javaspring-bootelasticsearchelasticsearch-aggregationelasticsearch-6

ElasticSearch java list unique values of field


Hi I am new to elastic search and not getting how to do it in java i tried googling everywhere i am getting curl solution and i am not so comfortable in converting from curl to java. I want to list unique values of a field and am using elasticseach6.1.2 and RestHighLevelClient so far my code is :

    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);

Here there is field called source i want to list unique values of that with name source,this code is returning me 5 rows with all fields am sure am doing completely wrong.


Solution

  • Try this for elastic version 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);