这里通过solrj操作索引:
1.添加索引
public static void main(String[] args) throws Exception { String urlString = "http://localhost:8080/solr/core1"; SolrClient solr = new HttpSolrClient.Builder(urlString).build(); //创建一个文档对象 SolrInputDocument document = new SolrInputDocument(); //向文档中添加 //第二个参数是域的值 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(); document.addField("id", "solr002"); document.addField("product_name", "华为手机"); document.addField("product_price", "3000"); document.addField("date", sdf.format(date)); //把文档添加到索引库 solr.add(document); solr.commit(); }
2.solr后台显示:
3.solr查询:
public static void main(String[] args) throws Exception { String urlString = "http://localhost:8080/solr/core1"; SolrClient solr = new HttpSolrClient.Builder(urlString).build(); SolrQuery query = new SolrQuery(); //添加查询条件 query.set("q", "*:*"); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //solr 日期格式: SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); //开始日期到结束日期 // String time = "createTime:["+sdf.format(new Date())+" TO "+sdf.format(new Date())+"]"; Date date = sdf.parse("2010-09-20 12:30:45"); String dateStr = getSolrDate(date); query.addFilterQuery("date:"+"["+ dateStr+" TO "+"*]"); //执行查询 QueryResponse queryResponse = solr.query(query); //遍历结果 //取文档列表 SolrDocumentList results = queryResponse.getResults(); System.out.println("查询结果总数量:" + results.getNumFound()); for (SolrDocument solrDocument : results) { System.out.println(solrDocument.get("id")); System.out.println(solrDocument.get("product_name")); System.out.println(solrDocument.get("product_price")); System.out.println( solrDocument.get("date").toString()); }
//change date to solrDate format public static String getSolrDate(Date date) { SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm:ss"); sdf2.setTimeZone(TimeZone.getTimeZone("UTC")); String result = sdf1.format(date) + "T" + sdf2.format(date) + "Z"; return result; }
结果:
查询结果总数量:4
solr002
华为手机
3000.0
[Wed Jan 17 14:46:44 CST 2018]
solr001
苹果手机
5000.0
[Wed Jan 17 14:00:00 CST 2018]
solr003
小米手机
2000.0
[Tue Jan 16 14:00:00 CST 2018]
solr004
三星手机
2000.0
[Thu Nov 16 14:00:00 CST 2017]
这里有一个问题:
我们在配置文件中:
<fieldType name="pdate" class="solr.DatePointField" docValues="true"/>
<fieldType name="pdates" class="solr.DatePointField" docValues="true" multiValued="true"/>
<fieldType name="date" class="solr.TrieDateField" docValues="true" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="dates" class="solr.TrieDateField" docValues="true" precisionStep="0" positionIncrementGap="0" multiValued="true"/>
<fieldType name="tdate" class="solr.TrieDateField" docValues="true" precisionStep="6" positionIncrementGap="0"/>
<fieldType name="tdates" class="solr.TrieDateField" docValues="true" precisionStep="6" positionIncrementGap="0" multiValued="true"/>
这里date的类型是TrieDateField,
并不是我们在solr文档中描述的DateRangeField ,而范围的查询,文档中说明在DateRangeField 查询是有效,虽然官方建议使用DateRangeField ,但是在TrieDateField中,也提供了范围查询的相关定义我们可以直接使用。
Working with Dates:http://blog.csdn.net/u014490376/article/details/79078219
http://blog.csdn.net/zteny/article/details/74873358