【发布时间】:2021-06-08 00:31:46
【问题描述】:
我现在在我的 java 项目中使用 spring-boot 和 spring-data-elasticsearch。
我必须统计每天报告一些数据的用户数量,所以我为它创建了一个自定义查询,
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-data-elasticsearch 发送 Count API?或者有什么方法可以在不定义自定义查询的情况下实现可以在一天范围内找到数据列表的查询?
谢谢!
【问题讨论】:
标签: java elasticsearch spring-data-elasticsearch