Oracle查询转Solr查询求助:基于当前日期的区间查询
将Oracle日期区间查询转换为Solr查询
核心逻辑对应
原Oracle查询中SYSDATE() BETWEEN START_DATE AND END_DATE的逻辑,在Solr中可拆解为两个条件的组合:
START_DATE小于等于当前时间END_DATE大于等于当前时间
Solr内置NOW关键字表示服务器当前时间,结合区间查询语法即可实现该逻辑,同时保留ACTIVE_FLAG='Y'的过滤条件。
代码实现
直接在你的查询构建代码中追加日期区间条件:
SolrQuery solrQuery = new SolrQuery(); StringBuilder q = new StringBuilder(); // 基础过滤条件:ACTIVE_FLAG为Y q.append("ACTIVE_FLAG:Y"); // 追加日期区间条件:当前时间处于START_DATE和END_DATE之间 q.append(" AND START_DATE:[* TO NOW]"); q.append(" AND END_DATE:[NOW TO *]"); // 将拼接好的查询条件设置到SolrQuery solrQuery.setQuery(q.toString());
关键注意点
- 必须确保Solr集合里的
START_DATE和END_DATE字段类型为date(在schema配置中定义为<field name="START_DATE" type="date" .../>),否则无法使用NOW关键字和区间查询语法。 - 如果需要使用客户端本地时间而非Solr服务器时间,需手动将本地日期格式化为Solr支持的格式(如
yyyy-MM-dd'T'HH:mm:ss.SSS'Z'),再替换代码中的NOW。
内容的提问来源于stack exchange,提问作者World of Titans
相关产品推荐
相关产品推荐

