単一フィールドの重複除去クエリ
ESの重複データを削除する場合は、terms集計を使用します。特定のステップは以下のとおりです。
- 照会条件を作成する。MatchAllQueryBuilderを使用してすべてのドキュメントを照会するか、必要に応じて他の照会条件を作成します。
- TermsAggregationBuilderを使用して指定フィールドの集計を作成し、重複のない結果をすべて返せるようにsizeパラメータを0に設定します。
- クエリに集約条件を追加する。
- クエリを実行して結果を取得します。
以下は、Java API を使用して、Elasticsearch の単一フィールドの重複を検索するサンプルコードです。
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」を重複除外したいフィールド名に置き換えてください。必要に応じて、クエリ条件にその他のフィルタ条件や並べ替え条件を追加することもできます。