集計サブクエリ:
。。TermsAggregationBuilderアグリゲーション= AggregationBuilders.terms( "DT_ID")フィールド( "dt_ids")サイズ(30000 )。 文字列agg_area_field = "CITY_CODE" 。 TermsAggregationBuilder area_field_builder = AggregationBuilders.terms( "area_field")フィールド(agg_area_field).size(30000 )。 area_field_builder.subAggregation(集合) SearchResponse応答 = client.prepareSearch(INDEX_NAME).setTypes( "lw_devices" ) .setQuery(boolQuery) .addAggregation(area_field_builder) .execute() .actionGet();
実質的デモ、重合を重合CITY_CODE重合の最初のフィールド、及び重合結果とその後のネストされたフィールドdt_ids重合(重合促進剤)によって2つのSQL基の当量が、他にネスト上記手段内、あなたはsubAggregationメソッドに関連付けることができます。
重合は、トラバーサルの結果です:
利用規約の条項の=のresponse.getAggregations()を取得( "area_field"。); 一覧 <Terms.Bucket>バケツ= terms.getBuckets(); 用(Terms.Bucketバケット:バケット){ // 地区 文字コード= (文字列)bucket.getKey(); System.out.println(コード)。 集計集計 = bucket.getAggregations()。 利用規約DT_ID = aggregations.get( "DT_ID" ); 一覧 <Terms.Bucket> buckets1 = dt_id.getBuckets(); 以下のため {(buckets1 Terms.Bucket用のbucket1) のSystem.out.println(bucket1.getKey() + ":" + bucket1.getDocCount())。 } }
アイデアは、最初の識別子に基づいて、凝集による応答を取得した後、重合対応するタイプの、得られたコレクションバケットを取得することです。その後、凝集によりバケットを取得し、このサイクルダウン集計の結果。