solrj日期范围内查询详解
发布日期:2021-06-30 13:14:18 浏览次数:2 分类:技术文章

本文共 1782 字,大约阅读时间需要 5 分钟。

开发环境

  • solrj 5.4.0
  • solr 6.6.0

关于搜索日期范围

网上关于使用solrj进行日期范围的查询,搜得到最多的只有如下的文章

但是这篇文章只写了如下的2行代码, 其他啥也没写.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");String time = "lostTime:["+sdf.format(new Date())+" TO "+sdf.format(new Date())+"]";

看到这两行代码,我是一脸懵逼. 不知道用来干嘛的.

之后琢磨了一下明白了

  • 字符串time就是用来查询的时间范围条件
  • lostTime 对应的是在solrhome中建立的要查询的日期的域fied的字段的名称
    如下图所示. 这篇博主对应的字段是lostTime,而我对应的字段是upatetime或者是updatetimedate
    一个是string类型,一个是date类型. 经过测试,这两种类型,都能进行时间范围内的查询.
  • 接着lostTime后面的,传递的第一个日期为查询的日期的起点
  • 第二个日期为查询的日期的终点. 例如第一个日期传递的是三天前,第二个日期传递的是今天.那么查询的时间范围就是从三天前到今天的. 注意第一个日期的值,一定要小于第二个日期的值.

为何使用yyyy-MM-dd’T’HH:mm:ss’Z’进行日期的格式化

在updatetimedate字段,我有设置type=“date”,在solr中进行查询时,显示的值如下图

可以看到,solr对于日期的类型,就是按照这样的格式进行存储的.
因此在solr索引库中,进行日期范围内的查找时,就要按照这样的格式进行格式化.

日期范围内查找的实际应用

当时已有如下的solrquerstring进行检索

(((title_2:市)) OR (((DOCS_2:市) OR (CON_ADD_2:市))) OR ((attachment_name:市)))

在上面的搜索的基础上,加上日期范围的条件
代码如下, 就是在原有的查询条件的外面,拼接一个and. 加一个括号, 把日期的范围条件加进去

(((title_2:市)) OR (((DOCS_2:市) OR (CON_ADD_2:市))) OR ((attachment_name:市))) AND (updatetimedate:[2019-01-01T15:17:59Z TO 2019-01-03T15:17:59Z])

在java代码中的运用如下. 根据传递进来的条件,查询一天的,一周的,一个月的日期范围.

String timeLimit="";StringBuilder solrQueryString = new StringBuilder("");Calendar calendar = Calendar.getInstance();if ("oneday".equals(timeLimit)) {
// 一天内 calendar.add(Calendar.DAY_OF_YEAR, -1);} else if ("oneweek".equals(timeLimit)) {
//一周内 calendar.add(Calendar.WEEK_OF_MONTH, -1);} else if ("onemonth".equals(timeLimit)) {
// 一月内 calendar.add(Calendar.MONTH, -1);}Date pastDay = calendar.getTime();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");String time = "updatetimedate:["+sdf.format(pastDay)+" TO "+sdf.format(new Date())+"]";solrQueryString.append(" AND ").append("(").append(time).append(")");

转载地址:https://javaweixin6.blog.csdn.net/article/details/85715899 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:黑马十次方项目day01-09之搭建公共模块创建返回值对象
下一篇:使用SpringDataRedis设置key的过期时间

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年05月03日 02时32分48秒