JAVA Rest High Level Clientはどのように集約したデータを取ります

6363 ワード

esを学習したばかりの子供靴では、クライアントによるesドキュメントの集約結果をどのように取得するか分かりにくいので、DSLを真似て集約を書き、集約結果を取得する方法を説明します.
一、以下の簡単な集約について、ドキュメントの全文マッチング、色フィールドの集約を目的とする.一致するドキュメントをカスタム名のcorsバケツに入れ、「elasticsearch権威ガイド」の範囲限定集約を参照します.
 1 {
 2     "size" : 0,
 3     "query" : {
 4         "match_all" : {}
 5     },
 6     "aggs" : {
 7         "colors" : {
 8             "terms" : {
 9               "field" : "color"
10             }
11         }
12     }
13 }

二、このDSLと照らし合わせて、ビジネス層の呼び出しのためにjava rest client apiの呼び出し方法を書きます.
 1     /**
 2      * ES     color
 3      *
 4      * @param indices
 5      * @return
 6      */
 7     public SearchResponse getAllColor(String... indices) {
 8         SearchRequest searchRequest = new SearchRequest(indices);
 9         SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().size(0);
10         searchSourceBuilder.query(QueryBuilders.matchAllQuery());
11         TermsAggregationBuilder builder = AggregationBuilders.terms("colors").field("color");
12         searchSourceBuilder.aggregation(builder);
13         searchRequest.source(searchSourceBuilder);
14 
15         try {
16             return client.getHighLevelClient().search(searchRequest);
17         } catch (IOException e) {
18             throw new BizException("    :{}", e.getCause());
19         }
20     }

三つ目は、ビジネス層が上記のgetAllColorメソッドを呼び出してresponseを取得し、responseを解析し、集約の結果を取得することです.
 2      *     
 3      *
 4      * @return
 5      */
 6     public List getAllColorInfo() {
 7         SearchResponse response = highRestHelper.getAllColor(getIndices());
 8         Aggregations aggregations = response.getAggregations();
 9         ParsedStringTerms colorTerms = aggregations.get("app_group");
10         List colors = new ArrayList<>();
11         List extends Terms.Bucket> buckets = colorTerms.getBuckets();
12         for (Terms.Bucket bucket : buckets) {
13             String appName = bucket.getKey().toString();
14             colors.add(appName);
15         }   
16         return colors;
17     } 

これですべての集約結果が得られ,DSLを参照して対応するapi呼び出しに変換できれば,解析プロセスは完全に多重化できる.