2017-03-17 4 views
0

冗談のSearchResultに集約サポートをヒット:トップは、私が集計クエリを作成する機能の下に使用しています

private TermsBuilder getAggregations(String[] outputFields) { 

     TermsBuilder topLevelAggr = AggregationBuilders.terms("level1").field("field1").size(0); 
     TermsBuilder aggr2 = AggregationBuilders.terms("level2").field("field2").size(0); 
     TermsBuilder aggr3 = AggregationBuilders.terms("level3").field("field3").size(0); 
     TermsBuilder aggr4 = AggregationBuilders.terms("level4").field("field4").size(0); 
     TopHitsBuilder topHitsBuilder = AggregationBuilders.topHits("doc").setSize(1).addSort("fieldValue", SortOrder.DESC); 

     aggr4.subAggregation(topHitsBuilder); 
     aggr3.subAggregation(aggr4); 
     aggr2.subAggregation(aggr3); 
     topLevelAggr.subAggregation(aggr2); 
     topHitsBuilder.setFetchSource(outputFields, new String[]{}); 

     return topLevelAggr; 
    } 

私はこのコードから正しい集計クエリを取得していますが、クエリを実行した後、私は抽出することはできませんよtop_hits集約結果。私は io.searchbox.core.SearchResultクラスを使用してクエリ結果を取得しています。このクラスでは、Top_Hits集約をサポートしていませんでした。

助けてください。ありがとう。

答えて

0

トップはhits aggregation java APIです。

はここelasticsearchドキュメントからの例です:

// sr is here your SearchResponse object 
Terms agg = sr.getAggregations().get("agg"); 

// For each entry 
for (Terms.Bucket entry : agg.getBuckets()) { 
    String key = entry.getKey();     // bucket key 
    long docCount = entry.getDocCount();   // Doc count 
    logger.info("key [{}], doc_count [{}]", key, docCount); 

    // We ask for top_hits for each bucket 
    TopHits topHits = entry.getAggregations().get("top"); 
    for (SearchHit hit : topHits.getHits().getHits()) { 
     logger.info(" -> id [{}], _source [{}]", hit.getId(), hit.getSourceAsString()); 
    } 
} 
+0

おかげでお返事を、私はこの方法を知っているが、私の代わりにSearchResponseの、のSearchResultオブジェクトを使用しています。 – pbajpai21

関連する問題