Spring data Elasticsearch для преобразования запроса агрегации Elasticsearch в код

#java #spring #elasticsearch #spring-data-elasticsearch

#java #spring #elasticsearch #spring-data-elasticsearch

Вопрос:

 {
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "id": {
              "value": 1111
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "sequence": {
      "terms": {
        "field": "sequence.keyword"
      },
      "aggregations": {
        "amount": {
          "sum": {
            "field": "amount"
          }
        }
      }
    },
    "totalAmount": {
      "sum_bucket": {
        "buckets_path": "sequence>amount"
      }
    }
  }
}
  

Spring Data ElasticSearch 3.2

 final SearchQuery searchQuery =
        new NativeSearchQueryBuilder()
            .withQuery(QueryHelper.boolQueryBuilder(id))
            .addAggregation(
                terms("sequence")
                    .field("sequence.keyword")
                    .subAggregations(subAggregations()))
            .addAggregation(sumBucket("sum_bucket", "sequence>amount"))
            .build();
  

Теперь, поскольку метод addAggregation NativeSearchQueryBuilder принимает AbstractAggregationBuilder, а sumBucket имеет тип PipelineAggregationBuilder, не может передать это значение addAggregation(sumBucket(«sum_bucket», «последовательность> сумма»)) из-за ошибки компиляции, есть идеи, как использовать sumBucket для агрегации терминов и записи на Java?

Ответ №1:

Я только что проверил код Spring Data Elasticsearch и сам Elasticsearch. Использование PipelineAggregationBuilder производных агрегаций в настоящее время невозможно с Spring Data Elasticsearch.

Я не знаю, почему Elasticsearch имеет две разные иерархии классов для агрегации, но Spring Data Elasticsearch в настоящее время может обрабатывать только AggregationBuilder производные классы, а не PipelineAggregationBuilder производные классы.

Для этого я создал проблему в Jira.

Комментарии:

1. Спасибо @P.J Meisch, буду ждать обновления по этому поводу!

2. В spring-data-elasticsearch 4.3 добавлена опция pipelineaggregations