您的位置:首页 > 其它

solr 创建日期索引字段和日期查询

2012-08-14 13:46 561 查看
首先创建一个JAVABEAN映射SCHEMA中的field

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 ,依次类推。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐