使用lucene的原因:
一个月前开发平台(其它项目组用其来开发,其实就是eclipse 插件,姑且这么叫吧,装一下,呵呵),要提供搜索编辑添加的解析文件的功能,之后做成一个下拉菜单出来。当时想着一个是db 来实现一个就是用ir了。db没什么好说的。想着如果用eclipse还要依赖个orcacle 或者mysql 真是太好笑了。用嵌入式db 如db4j,hsqldb还有java自带的java db(dirby)也不是不行。不过觉得关系数据库在用它没什么意思,其次把这些作为lib 加入模块,显得太重了。那毫不犹豫选了lucene,lucene 有自己的好处,第一eclipse 3.7自带lucene 2.9 和lucene 1.9,已经是module了。第二jdt 自身的搜索也是基于建立索引的,而不是像关系数据库。所以最终选了lucene。
关于lucene,lucene使用很简单,出奇的简单(推荐lucene in action)。第二lucene的实现大体分两部分,建立索引和搜索。这个和jdt 的搜索机制是一样的。当然写jdt 的一干大牛自然不会假他人之手,所有实现都是自己做的。不然也不会把search 作为自己存在的三大支柱之一了。lucene 的数据组织结构分为field,document,index,field 可对应rmdb的field,document可对应db的record,lucene 的index 可以对应于db的表,也可以对应为库,这是为什么呢?因为lucene 是没有schema的,那么就没有必要分表,(你可以想象一下如果db 没有shema的限制,所有表内数据都可以放入到一个表了)
之后设计也不难,首先是一个resource listener监听资源变化,在addlistener 打开一个index 线程,listener 监听到对应资源变化,通过blocking qunue 通知index 线程(不过要检查一下线程是否是running的,如果不是重新打开),线程从队列里拿信息,建立索引。之后就是搜索了。这些都没什么了。
遇到两个问题:
一开始我用project 和文件路径做”主键“field,来进行删除操作,结构删不掉,我以为是lucene 只是标记,不真正删除的问题,加了optimize(),结果还是不行,原来是我只把那个field store了,没有进行索引(没有查询的必要,就没加),结果导致deleteDocument 不能删除。
第二个,是在重建索引的时候,先把索引文件删除,在重新索引,结果一开始是lock 文件锁住,强行unlock掉,反正重建,缓冲区有数据也不要紧。之后还是不行,-0.cfs 始终没关掉,我在关闭索引的代码里,能释放的都释放了,indexWriter,directory,indexReader .... 能关的都关,结果还是不行。最后,只能用deleteAll 来清除了。
最后觉得所谓的搜索引擎也不是很高深的东西,比db 还简单点,貌似,虽然有queryparse 单那比sql 简单多了。简单用用还是没什么的。但是用户量大了,那就另一回事了吧。
相关推荐
安装:直接在Eclipse中选取“import->Existing Project”,该工程由于是Web工程,因此需要TomcatPlugin插件。 Eclipse工程/z_mysearch:原书中的搜索引擎完整实例 数据库脚本 网页索引格式 构建词库的源代码 从...
安装:直接在Eclipse中选取“import->Existing Project”,该工程由于是Web工程,因此需要TomcatPlugin插件。 Eclipse工程/z_mysearch:原书中的搜索引擎完整实例 数据库脚本 网页索引格式 构建词库的源代码 从...
安装:直接在Eclipse中选取“import->Existing Project”,该工程由于是Web工程,因此需要TomcatPlugin插件。 Eclipse工程/z_mysearch:原书中的搜索引擎完整实例 数据库脚本 网页索引格式 构建词库的源代码 从...
在安装 Cygwin 时,需要确认选择“openssh”安装包,以便在后续的步骤中使用 SSH 守护进程。安装完成后,需要配置 SSH 守护进程,以便 Hadoop 可以分布式运行。 在配置 SSH 守护进程时,需要注意 privilege ...
`instansearch`利用Lucene的强大索引能力,实现在Eclipse项目中即时、高效的代码搜索。这大大提高了开发者在大量代码库中查找特定代码片段的效率,节省了时间,提升了开发生产力。 `instansearch`插件的安装通常...
用于 Hibernate Search 的 Eclipse 插件可帮助您以更方便的方式使用 lucene 索引、分析器和其他功能。 它重复了 Luke 工具中的一些乐器,但在 Eclipse 中。 你需要在你的 eclipse 上安装 jboss hibernate 工具,因为...
在本文中,我们将深入探讨如何在 Linux 环境下使用 Eclipse 编译 Apache Nutch 1.0。Apache Nutch 是一个开源的网络爬虫框架,主要用于抓取和索引网页内容。Eclipse 是一个广泛使用的 Java 开发集成环境,它支持多种...
Lucene+Heritrix搜索引擎的一个成功案例 市值30000万 只需下载,用Eclipse-import为web工程就可以了 需要安装mysql 5.5 同时由于此工程为web工程所以假如您的Eclipse没有安装tomcatPlugin的话,请也同时安装tomcat...
Lucene+Heritrix搜索引擎的一个成功案例 市值30000万 只需下载,用Eclipse-import为web工程就可以了 ...同时由于此工程为web工程所以假如您的Eclipse没有安装tomcatPlugin的话,请也同时安装tomcatPlugin
NutzWk是集成了Shiro权限控制、Ehcache缓存、Redis、Email服务、Quartz定时任务、Lucene搜索引擎、Beetl/Velocity模板引擎等技术的开源企业级开发框架。 NutzWk 5.x 运行环境:1、JDK 8 162 +2、Maven 3.5.3 +3、...
NutzWk是集成了Shiro权限控制、Ehcache缓存、Redis、Email服务、Quartz定时任务、Lucene搜索引擎、Beetl/Velocity模板引擎等技术的开源企业级开发框架。 NutzWk 5.x 运行环境:1、JDK 8 162 +2、Maven 3.5.3 +3、...