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 ,依次类推。