有什么方法可以在 spring-data-elasticsearch 中的自定义查询中使用'countBy'前缀?



我现在将spring-bootspring-data-elasticsearch用于我的java项目。

我必须计算每天报告一些数据的用户数量,所以我为它创建了一个自定义查询

public interface UserInfoRepository extends ElasticsearchRepository<UserInfo, String> {
@Query("{"bool": {"must": [{"match": {"username": "?0"}},{"range": {"createdTime": {"gt": "now-1d/d","lt": "now+1d/d"}}}]}}")
List<UserInfo> findByUserNameWithinDayRange(String username);
}

并通过下面的代码获取用户的号码。

private long numberOfUser (String username) {
List<UserInfo> userInfoWithinADay = suggestionRepository.findByUserNameWithinDayRange(ip);
return userInfoWithinADay.size();
}

然而,我认为这种方式效率很低;我不需要UserInfo的整个列表;命中";他们的信息。

我能知道有没有任何方法可以在我的自定义查询中使用countBy前缀,或者通过使用spring数据弹性搜索发送Count API?或者,有没有任何方法可以实现一个查询,在不定义自定义查询的情况下查找一天范围内的数据列表?

谢谢!

  1. 您可以使用@CountQuery而不是@Query(或将参数count = true添加到@Query注释中(,并将存储库方法的返回值更改为long
  2. 这应该与查询派生和类似long countByUsernameAndCreatedTimeBetween(String username, Instant from, Instant two)的方法名一起使用——我还没有测试过这一点。你需要计算日期参数

我将使用方法long userWithinADay(String user)创建一个自定义存储库片段,在实现中,我将为名称和日期创建一个CriteriaQuery,并将其传递给ElasticsearchOperations.count()方法之一。

编辑:

在Spring Data Elasticsearch 4.2中添加了@CountQuery

最新更新