solr 的Working with Dates(二)


这里通过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


对solr源码进行编译打包,修改日期类型为本地时间类型,无时区;

http://blog.csdn.net/zteny/article/details/74873358









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值