`
yinhj
  • 浏览: 72713 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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

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

在前台web进行搜索时。采用如下代码
			/**
			 * sendtime在date1与date2之间的数据
			 */
			if (startTime != null && (!"null".equalsIgnoreCase(startTime))
					&& startTime.length() > 0 && endTime != null
					&& (!"null".equalsIgnoreCase(endTime))
					&& endTime.length() > 0) {
				RangeQuery dateQuery = new RangeQuery(new Term("sendtime",
						startTime), new Term("sendtime", endTime), true);
				query.add(dateQuery, BooleanClause.Occur.MUST);
			}


此时有一个很奇怪的现象
如果从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号的数据,居然没有。

有没有哪位大xia遇到过类试的问题????
分享到:
评论
7 楼 caocao 2008-05-15  
unique5945 写道
caocao 写道
那是因为RangeQuery内部被rewrite成许多TermQuery,时间精度越高、范围越大,TermQuery就越多,超过1024个,就爆掉了。
一般这种精确到天即可,限制365天,然后就没问题了。
那楼主的时间已经精确到秒了,2007-01-12 23:59:59 TO 2007-01-13 23:59:59如果按秒被rewrite的话早就超过1024了呀?可还是搜出来了,是否rewrite也不是按查询时的最小进度进行分割的?
小弟对此不解,愿闻其详?


rewrite的时候是根据索引文件里Term来搞的,如果那个时间段里只有500个Term,rewrite出来就是500个TermQuery
6 楼 unique5945 2007-11-22  
caocao 写道
那是因为RangeQuery内部被rewrite成许多TermQuery,时间精度越高、范围越大,TermQuery就越多,超过1024个,就爆掉了。
一般这种精确到天即可,限制365天,然后就没问题了。
那楼主的时间已经精确到秒了,2007-01-12 23:59:59 TO 2007-01-13 23:59:59如果按秒被rewrite的话早就超过1024了呀?可还是搜出来了,是否rewrite也不是按查询时的最小进度进行分割的?
小弟对此不解,愿闻其详?
5 楼 caocao 2007-08-09  
那是因为RangeQuery内部被rewrite成许多TermQuery,时间精度越高、范围越大,TermQuery就越多,超过1024个,就爆掉了。
一般这种精确到天即可,限制365天,然后就没问题了。
4 楼 cavenaghi 2007-08-09  
yinhj 写道
多谢楼上的兄弟。我所描述的问题已经解决。这是RangeQuery的问题。
对时间段的分段搜索我尝试了很多种办法。只有一种办法目前看来是可行的。
把时间格式化成yyyyMMddHHmmss这种格式。
然后采用RangeFilter来做搜索。
代码如下
Filter filter = new RangeFilter("sendtime", startTime, endTime, true,true);
IndexSearcher indexSearcher = null;
if (filter != null) {
	hits = indexSearcher.search(query,filter, new Sort(new SortField(
							"id", SortField.STRING, true)));
} else {
	hits = indexSearcher.search(query, new Sort(new SortField(
							"id", SortField.STRING, true)));
				}
其它方式都不行。都会出来这样哪样的问题。


噢,我上次只是对时间范围进行搜索,还没遇到过具体精确到秒的问题,哈哈
3 楼 yinhj 2007-08-02  
多谢楼上的兄弟。我所描述的问题已经解决。这是RangeQuery的问题。
对时间段的分段搜索我尝试了很多种办法。只有一种办法目前看来是可行的。
把时间格式化成yyyyMMddHHmmss这种格式。
然后采用RangeFilter来做搜索。
代码如下
Filter filter = new RangeFilter("sendtime", startTime, endTime, true,true);
IndexSearcher indexSearcher = null;
if (filter != null) {
	hits = indexSearcher.search(query,filter, new Sort(new SortField(
							"id", SortField.STRING, true)));
} else {
	hits = indexSearcher.search(query, new Sort(new SortField(
							"id", SortField.STRING, true)));
				}
其它方式都不行。都会出来这样哪样的问题。


2 楼 cavenaghi 2007-08-01  
我只了解对于日期的搜索条件是这样的
7月: 2007-07 to 2007-08
8月1日: 2007-08-01 to 2007-08-02

都要往后推移一次,时间应该也是这样的顺序,还有就是2007-01-13 00:00:00 TO 2007-01-13 23:59:59是否搜索时仅仅是搜索了对应于日期的

2007-08-01 to 2007-08-01

这样也是搜索不到的
1 楼 yinhj 2007-07-31  
我猜想可能是"-",":"和空格这三个字符在捣乱

相关推荐

    基于Lucene_Heritrix的垂直搜索引擎的研究与应用

    Lucene是一个用Java写的全文索引引擎工具包,访问索引时间快,支持多用户访问,可以跨平台使用。Heritrix是一个由Java开发的、开源的Web网络爬虫,用户可以使用它从网络上抓取想要的资源。探讨了Lucene和Heritrix在构建...

    lucene做的桌面搜索

    这个程序是用java做的桌面搜索,利用lucene API技术完成建立索引跟搜索功能,其它大部分功能是仿照火速搜索软件的,请大家多多指教,因为没时间完善,所以还存在很多缺点,特别是界面运行就比较慢~

    Heritrix lucene开发自己的搜索引擎(源码)1

    注:随光盘附带的mirror.rar文件是使用Heritrix从pconline网上抓取的手机信息页面(以网站镜象格式存储),在本书最后搜索引擎完整实例中需要使用到。由于光盘容量有限,笔者删除了原始镜像目录中一部分的网页,可能...

    开发自己的搜索引擎lucene and heritrix

    注:随光盘附带的mirror.rar文件是使用Heritrix从pconline网上抓取的手机信息页面(以网站镜象格式存储),在本书最后搜索引擎完整实例中需要使用到。由于光盘容量有限,笔者删除了原始镜像目录中一部分的网页,可能...

    垂直搜索引擎完全开源版 c#开发基于Lucene.net 带效果预览图片

    垂直搜索引擎完全开源版 c#开发基于Lucene.net 1.前台结合Lucene的搜索引擎功能,使得数据搜索更快; 2.新增加采集功能,采集时图片下载,flash下载功能,默认配置的是南海网分类信息的采集规则; 3.该代码简洁,...

    基于Lucene的实时全文检索系统(含论文)

    本文主要是研究了全文检索技术的基本原理以及Lucene的架构和工作原理,并介绍了基于Lucene的...没有对数据量达到一定规模后的系统性能和针对不同查询类型进行响应时间的测试。这些都是依然值得深入研究和改进的地方。

    基于java(结合lucene)实现的公交搜索系统

    Lucene集成: 使用Lucene建立公交线路和站点的全文搜索索引,支持快速高效的搜索功能。 界面设计: 设计用户友好的界面,显示搜索结果、线路规划等信息。 数据更新: 定期更新公交线路和站点数据,保持数据的最新性...

    java(结合lucene)版的公交搜索系统.zip

    它通过对公交数据的索引构建,实现了对公交线路、站点名称、途经站点等关键信息的全文搜索。用户可以通过输入关键词,快速定位到相关的公交线路和站点信息,大大提高了查询效率。 此外,该系统还具备丰富的功能特性...

    java(结合lucene)版的公交搜索系统的实现.rar

    路线搜索:用户可以根据出发地和目的地输入关键字进行公交路线搜索,系统通过Lucene索引快速匹配相关信息,返回最优的公交路线结果。 站点信息管理:系统可以管理公交线路和站点信息,包括添加、删除、编辑公交线路...

    基于Lucene的搜索引擎的设计与实现

    经过对搜索引擎的研究同时与Lucene自身的特性相结合,搜索引擎的设计与实现需要实现的功能阐述如下: (1)支持桌面文件搜索,格式包括txt、doc、xls和ppt; (2)支持分词查询 (3)支持全文搜索 (4)能够高亮...

    Heritrix lucene开发自己的搜索引擎(源码)3

    注:随光盘附带的mirror.rar文件是使用Heritrix从pconline网上抓取的手机信息页面(以网站镜象格式存储),在本书最后搜索引擎完整实例中需要使用到。由于光盘容量有限,笔者删除了原始镜像目录中一部分的网页,可能...

    aws-lambda-s3-index-search:通过保留AWS S3中的Lucene索引和通过AWS Lambda的搜索请求,使完整的搜索架构变得无服务器

    这将允许您在S3中维护Lucene索引,并在S3存储桶中运行Lucene搜索。 这里的想法是通过将Lucene索引保留在S3中,从而使完整的搜索体系结构变得无服务器,这为我们提供了无限的廉价存储,并利用AWS Lambda无服务器...

    Lucene 3.2学习总结.ppt

    前段时间学习lucene的总结,因为版本已经更新到了3.2,一些API有更新,很多现有的网页上找到的教程都跑不了。

    solr 企业搜索引擎教程

     可配置的发布间隔能够允许对时间线和缓存使用进行权衡选择 1.2.7 管理接口  能够对缓存使用,更新和查询进行综合统计  文本分析调试器,能够显示每个分析器每个阶段的结果  基于 WEB 的查询和调试输出:解析...

    自己动手写搜索引擎(罗刚著).doc

    自己动手写搜索引擎 1 第1章 了解搜索引擎 1 1.1 Google神话 1 1.2 体验搜索引擎 1 1.3 你也可以做搜索引擎 4 1.4 本章小结 4 第2章 遍历搜索引擎技术 5 2.1 30分钟实现的搜索引擎 5 2.1.1 准备工作环境(10分钟) 5...

    Lucene的全文检索的研究与应用

    为了改善传统全文检索方法在检索效率上的不足,结合Lucene构建了一个全文检索系统模型。介绍了全文检索 的基本过程.该模型可用于中小型的全文检索系统的实现,同时可基于此模型开发定制个性化的搜索引擎。最后通过...

    javajava概要设计方案.doc

    总体设计 2.1需求规定 2.1.1系统功能 本系统功能定位为为用户提供网页搜索功能,通过简单的提交关键字,实现页面检索 2.1.2系统性能 索引时间 检索时间 不同关键词时间不同) 2.1.2.1精度 支持中文检索,对了以索引...

    搜索引擎模块

    在文本框中输入要搜索的关键字,然后单击“搜一下”按钮后,系统将根据索引文件的内容自动进行搜索,将搜索的结果在页面中显示出来,并且将显示的结果中将要搜索的内容进行描红,Lucene搜索引擎运行效果如图1.3所示...

    asp.net 垂直搜索引擎

    1.前台结合Lucene的搜索引擎功能,使得数据搜索更快; 2.新增加采集功能,系统定时更新索引文件; 3.该代码简洁,完全开源5.支持上亿级数据的全文查询,时间在毫秒级,通常在30毫秒以下; 4.新闻系统与搜索引擎测试...

    Tantivy 是受 Apache Lucene 启发并用 Rust 编写的全文搜索引擎库

    10ms),非常适合命令行工具BM25评分(与Lucene相同)自然查询语言(例如(michael AND jackson) OR "king of pop" )短语查询搜索(例如"michael jackson" )增量索引多线程索引(在我的桌面上索引英文维基百科需要 ...

Global site tag (gtag.js) - Google Analytics