用lucene对时间索引后搜索的问题。(转)

用lucene对时间索引后搜索的问题。 (转)

我的数据量比较大,故后台采用一个线程专用于索引的建立。目前索引库已经在700多M了,估计全部建立完成在1.5G左右。
每一个doc里包括了一个field(sendtime,时间字符串,yyyy-mm-dd hh:MM:ss格式)

在前台web进行搜索时。采用如下代码

代码
  1. /**
  2. * sendtime在date1与date2之间的数据
  3. */
  4. if (startTime != null && (!"null".equalsIgnoreCase(startTime))
  5. && startTime.length() > 0 && endTime != null
  6. && (!"null".equalsIgnoreCase(endTime))
  7. && endTime.length() > 0) {
  8. RangeQuery dateQuery = new RangeQuery(new Term("sendtime",
  9. startTime), new Term("sendtime", endTime), true);
  10. query.add(dateQuery, BooleanClause.Occur.MUST);
  11. }

此时有一个很奇怪的现象
如果从2007-01-12 23:59:59 TO 2007-01-13 23:59:59开始搜索就能查出大约4000条数据,其中包括2007-01-13 22点的数据约2000条。
如果从[2007-01-13 00:00:00 TO 2007-01-13 23:59:59]来查询13号的数据,居然没有。

我所描述的问题已经解决。这是RangeQuery的问题。
对时间段的分段搜索我尝试了很多种办法。只有一种办法目前看来是可行的。
把时间格式化成yyyyMMddHHmmss这种格式。
然后采用RangeFilter来做搜索。
代码如下

代码
  1. Filter filter = new RangeFilter("sendtime", startTime, endTime, true,true);
  2. IndexSearcher indexSearcher = null;
  3. if (filter != null) {
  4. hits = indexSearcher.search(query,filter, new Sort(new SortField(
  5. "id", SortField.STRING, true)));
  6. } else {
  7. hits = indexSearcher.search(query, new Sort(new SortField(
  8. "id", SortField.STRING, true)));
  9. }
  10. 其它方式都不行。都会出来这样哪样的问题。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12467/viewspace-148293/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12467/viewspace-148293/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值