如何将此 JSON 写入 Elasticsearch Java API?

普拉秋什·辛格

JSON对 Elasticsearch有以下查询(工作正常)-

{
  "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]

我究竟做错了什么?

普拉秋什·辛格

我说的方法写错了。这是正确的一个——

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)
        );
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章