solr 创建日期索引字段和日期查询
2012-08-14 13:46
561 查看
首先创建一个JAVABEAN映射SCHEMA中的field
schema中的field定义如下:
然后利用solrj创建索引:
然后我们就可以在solr admin界面里查询了,查询字符串应该这样写:createtime:[NOW/DAY-1DAY TO *]
[]表示查询一个日期范围,包括边界即createtime>=a and createtime <=b。{}表示查询一个日期范围不包括边界即createtime>a and createtime <b。
A TO * 表示没有上界即>=A或是>A ,视使用的是[]还是{}而定
* TO A 表示没有下界即<=A或是<A ,视使用的是[]还是{}而定
NOW表示当前时间,NOW/DAY表示当前日期.
支持运算,比如取前一天就是NOW/DAY-1DAY,后一天就是NOW/DAY+1DAY,前年NOW-1YEAR ,依次类推。
public class DemoModel { @Field public String id; @Field public String type; @Field public String name; @Field public String createtime; }
schema中的field定义如下:
<fields> <!-- general --> <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/> <field name="type" type="string" indexed="true" stored="true" multiValued="false" /> <field name="name" type="text_en" indexed="true" stored="true" multiValued="false" /> <field name="text" type="text_general" indexed="true" stored="false" multiValued="true" /> <field name="createtime" type="date" indexed="true" stored="true" multiValued="false" /> </fields>
然后利用solrj创建索引:
package com.xj.demo; import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.TimeZone; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrServer; import com.xj.model.DemoModel; public class SolrClientDemo3 { public static final String SOLR_URL = "http://localhost:8088/solr-src/core1"; /** * 创建索引或者更新索引,通过BEAN的方式。ID存在的话就是更新,不存在的话就是创建 * @param args */ public static void main(String[] args) { TimeZone timeZone = TimeZone.getTimeZone("UTC"); Calendar cal = Calendar.getInstance(); // TODO Auto-generated method stub SolrServer solr = null; solr = new HttpSolrServer(SOLR_URL); List<DemoModel> list = new ArrayList<DemoModel>(); DemoModel model = null; model= new DemoModel(); model.id="bean_111111"; model.name="奥运总共204块金牌"; model.type="bean"; model.createtime= "NOW/DAY-1DAY";//当前日期减一天 list.add(model); model= new DemoModel(); model.id="bean_222222"; model.name="中国又添一枚金牌,中国获得38块金牌"; model.type="bean"; model.createtime="NOW";//当前时间,包括具体的时间 list.add(model); model= new DemoModel(); model.id="bean_333333"; model.name="美国获得47块金牌"; model.type="bean"; model.createtime= "NOW/DAY";//当前日期,时间为00:00:00 list.add(model); model= new DemoModel(); model.id="bean_444444"; model.name="法国获得18块金牌"; model.type="bean"; model.createtime= "1995-12-31T23:59:59Z";//直接写UTC格式字符串 list.add(model); try { solr.addBeans(list); solr.commit(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (SolrServerException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }
然后我们就可以在solr admin界面里查询了,查询字符串应该这样写:createtime:[NOW/DAY-1DAY TO *]
[]表示查询一个日期范围,包括边界即createtime>=a and createtime <=b。{}表示查询一个日期范围不包括边界即createtime>a and createtime <b。
A TO * 表示没有上界即>=A或是>A ,视使用的是[]还是{}而定
* TO A 表示没有下界即<=A或是<A ,视使用的是[]还是{}而定
NOW表示当前时间,NOW/DAY表示当前日期.
支持运算,比如取前一天就是NOW/DAY-1DAY,后一天就是NOW/DAY+1DAY,前年NOW-1YEAR ,依次类推。
相关文章推荐
- solr入门之lucene创建索引和查询索引及查询的源码读取类确定
- Oracle 创建索引的基本规则总结 [日期:2011-08-02] 来源:Linux社区 作者:leishifei [字体:大 中 小] 一、B-Tree索引 1. 选择索引字段的原则:
- MongoDB查询字段没有创建索引导致的连接超时异常解案例分享
- MongoDB查询字段没有创建索引导致的连接超时异常解案例分享
- 对于大量left join 的表查询,可以在关键的 连接节点字段上创建索引。
- Solr4:利用SolrJ创建索引,建立查询简单示范
- solr创建查询索引
- 查询数据库表索引名称、索引字段、创建索引语句
- Mongodb在查询某个字段是否存在,执行删除字段,python中排序和创建索引
- 查询数据库表索引名称、索引字段、创建所以语句
- 查询oracle表的信息(表,字段,约束,索引)
- java mongodb 基础系列---查询,排序,limit,$in,$or,输出为list,创建索引,$ne 非操作
- 深入理解Oracle索引(25):一招鲜、吃遍天之单字段索引创建思路
- Neo4j 查询已经创建的索引与约束
- (3)sql 学习 :创建库,表,视图,索引,drop,alter,日期,IFNULL
- all与any操作符和返回两个结果集和把一个结果集当表和查询结果创建表和同时更新几个字段
- CxGrid按照查询结果自动创建字段
- Solr DIH以Mysql为数据源批量创建索引
- 关于Oracle字段类型Date使用mybatis generator自动生成工具出现的查询日期只精确到年月日问题