我正在使用spring-data-elasticsearch
,我只是想知道是否有可能以json字符串的形式发送聚合查询。
所以查询看起来像这样:
{
"size": 0,
"aggs": {
"cspByState": {
"terms": {
"field": "properties.csp.keyword"
},
"aggregations": {
"levelType": {
"terms": {
"field": "level.keyword"
}
}
}
}
},
"query": {
"bool": {
"must": [{
"bool": {
"should": [{
"wildcard": {
"event": {
"value": "input.start.*"
}
}
},
{
"wildcard": {
"event": {
"value": "input.finish.*"
}
}
}
]
}
}
],
"filter": [
{
"range": {
"dateTime": {
"gte": "2021-03-01T00:00Z",
"lte": "2021-03-11T23:59:59.99Z",
"format": "strict_date_optional_time"
}
}
}
]
}
}
}
字符串
我试着做以下操作,但它总是在未知聚合上失败:
final WrapperQueryBuilder wrapper = new WrapperQueryBuilder(queryString);
final SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(wrapper);
searchSourceBuilder.size(0);
final SearchRequest searchRequest = new SearchRequest("csp-index");
searchRequest.source(searchSourceBuilder);
Flux.from(elasticsearchTemplate.execute(client -> client.aggregate(searchRequest))).collectList().block();
Caused by: ElasticsearchException[Elasticsearch exception [type=named_object_not_found_exception, reason=[2:11] unknown field [aggs]]]
at org.elasticsearch.ElasticsearchException.innerFromXContent(ElasticsearchException.java:496)
的数据
3条答案
按热度按时间ffvjumwh1#
以这些文字
字符串
您设置了搜索请求的
query
部分和size
部分。您不能将整个搜索请求作为查询参数传入。聚合必须设置为
型
我不知道Elasticsearch是否提供了一个解析JSON字符串的
AggregationBuilder
,当我简短地查看AggregationBuilders
类时,我没有看到一个。vojdkbi02#
最后我用下面的代码完成了它。主要的事情是将
typed_keys
查询属性发送到弹性,然后从DefaultReactiveElasticsearchClient
获取一些方法来进行响应解析。字符串
ndasle7k3#
仍然不可能使用Elasticsearch Java API Client 8以JSON形式发送聚合。我在代码中完成了聚合的创建,并仅使用JSON形式的查询:
字符串
这个API有点奇怪,因为几乎在任何地方都可以使用构建器函数(例如
Function<TermsAggregation.Builder, ObjectBuilder<TermsAggregation>> fn
)。但是withAggregation
只需要Aggregation
而不是Function<Aggregation.Builder, Aggregation.Builder>
,所以你必须调用build()
。