Spring data elasticsearch named queries for agregation

7tofc5zh  于 2023-03-22  发布在  ElasticSearch
关注(0)|答案(1)|浏览(130)

我有一个聚合很大的查询,因此,我试图使用命名查询来进行elasticsearch。我设法从属性文件中读取查询,但无法读取聚合。有没有办法从属性文件中读取整个查询和查询聚合?

阅读查询示例:
查询库:

public interface UserRepository extends ExtendedElasticsearchRepository<User, Integer> {
    //named query lookup found getUserQuery inside users-named-queries.properties and used its query
    SearchHits<User> getUserQuery(Integer fieldId);
}

方法调用:

SearchHits<User> users = userRepository.getUserQuery(1); <- returns hits
Aggregations usersAggregations = users.getAggregations(); <- returns null beacouse there is no aggregation

应用程序:

@EnableElasticsearchRepositories(basePackages = "org...", repositoryBaseClass = CdpElasticsearchRepository.class, namedQueriesLocation = "classpath:*-named-queries.properties")

users-named-queries.properties

User.getUserQuery={"bool": { "filter": [{"term": {"fieldId": ?0}}]}}

理想行为:

User.getUserQuery={"query":{"bool": { "filter": [{"term": {"fieldId": ?0}}]}}, "aggs": {"sum_field": {"sum": {"field": "fieldId"}}}}

错误

org.springframework.data.elasticsearch.UncategorizedElasticsearchException:Elasticsearch exception [type=parsing_exception,reason=unknown query [query]];嵌套异常为ElasticsearchStatusException[Elasticsearch exception [type=parsing_exception,reason=unknown query [query]]];nested:ElasticsearchException[Elasticsearch exception [type=named_object_not_found_exception,reason=[1:10] unknown field [query]]];

9vw9lbht

9vw9lbht1#

好了,我学到了一些我还不知道的关于Spring Data Elasticsearch的东西:你可以在查询属性文件中定义查询,作为使用@Query注解函数的替代方案。谢谢你把我推到这一步。
这些查询与使用@Query注解时相同,这意味着只有发送到Elasticsearch的搜索请求的 query 部分可以放在那里,而不是 aggs 或其他可能进入搜索请求主体的内容。
命名查询的值以wrapper query的形式发送给Elasticsearch,它只接受查询部分,而不接受 aggs
我同意,这将是伟大的,能够添加aggs或其他元素,我创建了an issue,。

相关问题