【问题标题】:Spring-Data elastic search repo count with custom @Query annotation not working "Expected 1 but found 30 results"带有自定义 @Query 注释的 Spring-Data 弹性搜索存储库计数不起作用“预期 1,但找到 30 个结果”
【发布时间】:2026-02-13 18:40:01
【问题描述】:

对于我的应用程序,我必须对弹性执行自定义计数,我想在我们使用的 ElasticsearchCrudRepository 中为此使用 @Query 注释。当我使用以下签名时:

@Query("CUSTOM BOOL QUERY HERE")
long countItemsCustom();

这会导致java.lang.IllegalArgumentException: Expected 1 but found 30 results 异常,因为它是作为查询而不是计数执行的。对于 spring-data-cassandra,我们有一个特殊的 @CountQuery 注解来解决这个问题。 spring-data-elasticsearch 中是否有类似的解决方案?

我可以使用弹性客户端或模板来执行自定义查询并获取结果,但如果可能的话,我更喜欢使用现有的存储库接口。

【问题讨论】:

    标签: java spring spring-boot spring-data spring-data-elasticsearch


    【解决方案1】:

    不,目前不可能。 ElasticsearchStringQuery 类检查带有@Query 注释的方法的返回类型,然后执行适合该方法返回类型的ElasticsearchOperations.queryFor...() 方法。这些是对数据的查询,而不是对计数的查询。

    我在Spring Data Elasticsearch Jira 中创建了一个问题以添加此功能。

    【讨论】:

      最近更新 更多