lucene按时间排序 我在项目中的应用(三)

排序的关键点有两个:

1:首先你要排序的字段必须是被index的,并且是untokenized的。

如:

doc.add( new  Field( " time " , dv.get( " time " ).toString(), Field.Store.NO, Field.Index.UN_TOKENIZED));
// dv.get("time").toString()是字符串,2.2版本的Field的构造函数没有date,long类型,所以要把时间转化为yyyy-mm-dd或yyyy-mm-dd hh mm ss 形式(不能两种格式,不然结果有问题),不必将时间转为数字,没有那样的构造函数。搜索时可选SortField.INT,或别的

2:在检索时候:

如:   
  
   /*****  排序  *****/
   /*
    * 1.被排序的字段必须被索引过(Indexecd),在索引时不能 用 Field.Index.TOKENIZED
    *   (用UN_TOKENIZED可以正常实现.用NO时查询正常,但排序不能正常设置升降序)
    * 2.SortField类型
    *   SCORE、DOC、AUTO、STRING、INT、FLOAT、CUSTOM 此类型主要是根据字段的类型选择
    * 3.SortField的第三个参数代表是否是降序true:降序  false:升序
    */
   Sort sort = new Sort(new SortField[]{new SortField("time", SortField.INT, true)});
   Hits hits = searcher.search(querystring,sort);
   
    /*
    * 按日期排序
    */
   Sort sort = new Sort(new SortField[]{new SortField("createTime", SortField.INT, false)});
 
    
    /*****  过滤器 ******/
   QueryParser qp1 = new QueryParser("content",analyzer);
   Query fquery  = qp1.parse("我");
   
   BooleanQuery bqf = new BooleanQuery();
   bqf.add(fquery,BooleanClause.Occur.SHOULD);
    
   QueryFilter qf = new QueryFilter(bqf);
   
   Hits hits = searcher.search(query);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值