java - 有什么方法可以在 spring-data-elasticsearch 中使用“countBy”前缀和我的自定义查询?
问题描述
我现在正在使用spring-boot
andspring-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
在我的自定义查询中使用前缀,或者Count API
使用 spring-data-elasticsearch 发送吗?或者有什么方法可以在不定义自定义查询的情况下实现可以在一天范围内找到数据列表的查询?
谢谢!
解决方案
- 您可以使用
@CountQuery
代替@Query
(或将参数添加count = true
到@Query
注释中) - 并将存储库方法的返回值更改为long
. - 这应该适用于查询派生和方法名称
long countByUsernameAndCreatedTimeBetween(String username, Instant from, Instant two)
- 我没有测试过这个。你需要计算日期参数
我将使用一个方法创建一个自定义存储库片段,long userWithinADay(String user)
并在实现CriteriaQuery
中为名称和日期创建一个并将其传递给其中一个ElasticsearchOperations.count()
方法。
编辑:
@CountQuery
在 Spring Data Elasticsearch 4.2 中添加。
推荐阅读
- reactjs - react-admin 中的 FormTab 错误不能与 div 一起使用
- rpa - 如何使用 G1ANT 工作室中的 Abbyy 插件解决“检索具有 CLSID 的组件的 COM 类工厂”错误?
- mysql - “WHERE CLAUSE”中的未知列
- python - Python中的Matlab大鼠函数
- flask - 如果我有相同的多个键,如何从 WTForms 中的 SelectField 获取值(非键)数据?
- javascript - 为什么单击链接时我的 React 应用程序会转到自定义 404 未找到页面?
- java - java 版本与 Eclipse 不匹配
- xaml - 如何使用现有的 ContentPages (Xamarin.Forms) 设置主详细信息?
- r - 为什么这段代码显示 dwapi::configure()?
- swift - Copy and pasting selected text from the current, from a Mac sandboxed application