有什么方法可以使用';计数单位';使用spring data elasticsearch中的自定义查询作为前缀?
我现在正在为我的java项目使用有什么方法可以使用';计数单位';使用spring data elasticsearch中的自定义查询作为前缀?,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我现在正在为我的java项目使用spring boot和spring data elasticsearch 我必须统计每天报告一些数据的用户数量,因此我为其创建了一个自定义查询 public interface userinforpository扩展了ElasticsearchRepository{ @查询(“{\'bool\':{\'must\':[{\'match\':{\'username\':\'0\'”},{\'range\':{\'createdTime\':{\'gt\':\'no
spring boot
和spring data elasticsearch
我必须统计每天报告一些数据的用户数量,因此我为其创建了一个自定义查询
public interface userinforpository扩展了ElasticsearchRepository{
@查询(“{\'bool\':{\'must\':[{\'match\':{\'username\':\'0\'”},{\'range\':{\'createdTime\':{\'gt\':\'now-1d/d\',\'lt\':'now+1d/d\'}}”)
列出findByUserNameWithinDayRange(字符串用户名);
}
并通过下面的代码获取用户的号码
private long numberOfUser(字符串用户名){
列出UserInfoWithInDay=suggestionRepository.findByUserNameWithinDayRange(ip);
返回userInfoWithinADay.size();
}
然而,我认为这种方式效率很低;我不需要整个用户信息列表,只需要他们的“点击”信息
我能知道有什么方法可以在我的自定义查询中使用countBy
前缀,或者使用spring data elasticsearch发送Count API
?或者,有没有什么方法可以实现一个查询,在不定义自定义查询的情况下查找一天范围内的数据列表
谢谢
@CountQuery
而不是@Query
(或者将参数count=true
添加到@Query
注释中),并将存储库方法的返回值更改为long
long countbyusername和createdTimebetween(字符串username,Instant from,Instant two)
-我还没有测试过这一点。您需要计算日期参数long userWithinADay(String user)
创建一个自定义存储库片段,在实现中,我将为名称和日期创建一个CriteriaQuery
,并将其传递给一个ElasticsearchOperations.count()
方法
编辑:
@CountQuery
已添加到Spring Data Elasticsearch 4.2中。非常感谢,p.J.Meisch。你的答案正是我想要的。如果您不介意,请告诉我在哪里可以获得@CountQuery
注释,或者在@Query
中使用count=true
参数?似乎我无法导入@CountQuery
,并且@Query注释中不支持count
参数。(只能找到值
和名称
);你的评论是什么意思<代码>我将使用long userWithinADay(String user)方法创建一个自定义存储库片段,在实现中,我将为名称和日期创建一个CriteriaQuery,并将其传递给ElasticsearchOperations.count()之一方法。这是否意味着您更喜欢在ElasticsearchRepository上使用CriteriaQuery而不是Query
注释?再次感谢你们!我刚刚编辑了我的答案,@CountQuery
的更改和@Query
的参数都添加到了Spring Data Elasticsearch的最新版本中。至于使用CriteriaQuery
或@Query
,这主要是一个品味问题。我更喜欢第一种,但在您的例子中,使用带注释的查询有让Elasticsearch进行日期计算的优势。哦,我刚刚发现我使用了org.springframework.boot:spring boot starter data Elasticsearch(2.4.5)
,而不是org.springframework.data:spring data Elasticsearch
。非常感谢。