如何使用spring在弹性搜索中按字段分组文档

时间:2016-10-13 11:54:59

标签: elasticsearch spring-data-elasticsearch

我有用户文档,其中包含各种字段,包括addressId。我想要具有不同addressId的用户列表。如果两个用户具有相同的addressId,则返回任何一个用户并跳过其他用户。

我正在尝试按addressId对用户进行分组,但它无法正常工作。

SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).
            addAggregation(AggregationBuilders.terms("addressId").field("addressId").size(1)).
            withPageable(new PageRequest(page, size)).build();

1 个答案:

答案 0 :(得分:0)

您希望添加大小为1的top hits subaggregation。这将为每个addressId字段返回一个文档(即您的情况下的用户)。

SearchQuery searchQuery = new NativeSearchQueryBuilder()
    .withQuery(boolQueryBuilder)
    .addAggregation(AggregationBuilders
    .terms("addressId")
    .field("addressId")
    .size(Integer.MAX_VALUE)
    .subaggregation(AggregationBuilders.topHits("justOneUserPerAddressId)
         .setSize(1)
    )
    .withPageable(new PageRequest(page, size)).build();