2017-06-14 87 views
1

我有Elasticsearch以下JSON查詢(其中工作正常) -如何將這個JSON寫入Elasticsearch Java API?

{ 
    "aggs": { 
    "by_emotion": { 
     "terms": {"field": "classifier_emotion"}, 
     "aggs": { 
     "avg_probability": { 
      "avg": {"field": "classifier_emotion_probability"} 
     }, 
     "sum_probability": { 
      "sum": {"field": "classifier_emotion_probability"} 
     } 
     } 
    } 
    } 
} 

我試圖使用Java API來重寫它 -

public AggregationBuilder<TermsBuilder> getClassifierAggregation(String classifierName) { 
    String probailityField = classifierName + "_probability"; 
    return AggregationBuilders.terms("by_class") 
     .subAggregation(
      AggregationBuilders.terms("classifier").field(classifierName) 
     ) 
     .subAggregation(
      AggregationBuilders.avg("avg_probability").field(probailityField) 
     ) 
     .subAggregation(
      AggregationBuilders.sum("sum_probability").field(probailityField) 
     ); 
} 

,然後用它作爲 -

SearchRequestBuilder request = elasticsearchClient.prepareSearch(index) 
     .setSearchType(SearchType.QUERY_THEN_FETCH) 
     .setFrom(0) 
     .setSize(0) 
     .addAggregation(getClassifierAggregation(classifierName)); 
SearchResponse response = request.execute().actionGet(); 

但我收到以下異常 -

org.elasticsearch.search.aggregations.AggregationExecutionException: could not find the appropriate value context to perform aggregation [by_class] 

我在做什麼錯?

回答

0

我提到的方法寫錯了。這是正確的 -

public TermsBuilder getClassifierAggregation(String classifierName) { 
    String probailityField = classifierName + "_probability"; 
    return AggregationBuilders.terms("by_class").field(classifierName) 
     .subAggregation(
      AggregationBuilders.avg("avg_probability").field(probailityField) 
     ) 
     .subAggregation(
      AggregationBuilders.sum("sum_probability").field(probailityField) 
     ); 
}