要對es單個字段進行去重查詢,可以使用terms聚合來實現。具體步驟如下:
構建查詢條件。使用MatchAllQueryBuilder查詢所有文檔,或者根據需求構建其他查詢條件。
構建聚合條件。使用TermsAggregationBuilder來對指定字段進行聚合,并設置size參數為0,以便返回所有的去重結果。
將聚合條件添加到查詢中。
執行查詢并獲取結果。
以下是一個使用Java API進行es單個字段去重查詢的示例代碼:
SearchRequest searchRequest = new SearchRequest("your_index");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("unique_field_agg").field("your_field").size(0);
searchSourceBuilder.aggregation(aggregationBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
Terms terms = searchResponse.getAggregations().get("unique_field_agg");
for (Terms.Bucket bucket : terms.getBuckets()) {
String fieldValue = bucket.getKeyAsString();
// 處理每個去重結果
}
將上述代碼中的"your_index"替換為你的索引名稱,"your_field"替換為你要去重的字段名稱。根據實際需求,可以在查詢條件中添加其他過濾條件或排序條件。