有什么方法可以使用';计数单位';使用spring data elasticsearch中的自定义查询作为前缀?

有什么方法可以使用';计数单位';使用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

我现在正在为我的java项目使用
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
    。非常感谢。