#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