Lucene是开放源代码的全文搜索引擎工具包,凭借着其强劲的搜索功能和简单易用的实现,在国内已经很普及,甚至一度出现了言搜索必称Lucene的盛景。上个月Lucene的开发团队发布了 Java Lucene 2.3.1 ,相信很多朋友们都用上了。在国内对Lucene的介绍可以分为3块儿:
第一类是:以车东 的Lucene:基于Java的全文检索引擎简介 为代表的基础入门介绍;
第二类是Lucene倒排索引原理和Lucene软件包、实现类的介绍;
第三类是以中文分词为中心的介绍;
任何一个软件,包括所有伟大的软件都有这样或者那样的“缺点”和各自适用的领域,Lucene也不例外。在国内对Lucene这个软件包的批评,似乎没有 看到过。可能大家都忙于做项目,纵然Lucene有再大的缺陷,凭借着Lucene良好的口碑,也不会说上一句不是。
今天在阅读LingWay (一个做垂直的语义搜索引擎)的CTO Cedric Champeau 先生的博客是发现有一篇题为:Why lucene isn’t that good 为什么Lucene并不是想象的那么棒 的文章:Champeau 开门见山指出了Lucene的6大不足之处,鉴于 Lingway 公司使用Lucene已有好几年的历史,我相信Cedric Champeau的对Lucene的评论还是值得一读。
不选择使用Lucene的6大原因:
6、Lucene 的内建不支持群集。
Lucene是作为嵌入式的工具包的形式出现的,在核心代码上没有提供对群集的支持。实现对Lucene的群集有三种方式:1、继承实现一个 Directory;2、使用Solr 3、使用 Nutch+Hadoop;使用Solr你不得不用他的Index Server ,而使用Nutch你又不得不集成抓取的模块;
5、区间范围搜索速度非常缓慢;
Lucene的区间范围搜索,不是一开始就提供的是后来才加上的。对于在单个文档中term出现比较多的情况,搜索速度会变得很慢。因此作者称Lucene是一个高效的全文搜索引擎,其高效仅限于提供基本布尔查询 boolean queries;
4、排序算法的实现不是可插拔的,因为贯穿Lucene的排序算法的tf/idf 的实现,尽管term是可以设置boost或者扩展Lucene的Query类,但是对于复杂的排序算法定制还是有很大的局限性;
3、Lucene的结构设计不好;
Lucene的OO设计的非常糟,尽管有包package和类class,但是Lucene的设计基本上没有设计模式的身影。这是不是c或者c++程序员写java程序的通病?
A、Lucene中没有使用接口Interface,比如Query 类( BooleanQuery, SpanQuery,TermQuery…) 大都是从超类中继承下来的;
B、Lucene的迭代实现不自然: 没有hasNext() 方法, next() 返回一个布尔值 boolean然后刷新对象的上下文;
2、封闭设计的API使得扩展Lucene变得很困难;
参考第3点;
1、Lucene的搜索算法不适用于网格计算;
详情可以查看:Cedric Champeau 先生的博客:Why lucene isn’t that good 为什么Lucene并不是想象的那么棒
分享到:
相关推荐
【Lucene搜索技术】是一种...总的来说,Lucene是一个强大且灵活的全文检索工具,它通过高效的数据结构和算法,解决了传统数据库在全文搜索和模糊查询上的不足,成为开发全文搜索引擎或增强现有应用检索能力的重要选择。
尽管目前存在一些不足,但通过不断迭代和优化,我们可以期待一个更加高效、用户友好的本地搜索工具。对于学习Lucene和Java开发的初学者来说,这是一个很好的实践项目,可以帮助他们深入理解全文检索的原理和实现方法...
1. **优化分析器**:根据业务需求选择合适的分析器,避免过度切分或不足切分。 2. **内存与磁盘管理**:合理配置Directory类型,如内存目录用于小规模索引,而文件系统目录适用于大规模数据。 3. **并发控制**:在多...
Lucene 删除 合并索引,可以指定几个索引文件合并成一个索引文件。自己写的,有很多不足之处请多指教
论文还关注了Lucene的其他不足,例如检索结果的过滤和排序。作者提出对Lucene的数据源进行预处理,以提升检索效率,并对检索结果的处理进行了改进,如引入相关性排序,使得检索结果更加符合用户的期望。 最后,论文...
- **优化内存使用**:合理配置缓存大小,避免因内存不足导致的性能下降。 - **定期更新**:保持Lucene版本的更新,以获取最新的性能优化和安全修复。 通过了解和掌握Apache Lucene 7.3.0的核心特性和使用方法,...
在这个程序中,可能存在的不足之处可能包括: - 没有考虑性能优化,如缓存 `Analyzer` 或 `Query` 结果。 - 分页和高亮的错误处理可能不完善,例如分页索引越界或高亮失败的处理。 - 可能没有处理多字段高亮,只对...
在lucene搜索分页过程中,可以有两种方式 一种是将搜索结果集直接放到session中,但是假如结果集非常大,同时又存在大并发访问的时候,很可能造成服务器的内存不足,而使服务器宕机 还有一种是每次都重新进行搜索,这样...
在实际应用中,我们需要处理可能遇到的各种异常,如磁盘空间不足、文件锁等。使用`try-catch`语句捕获并适当地处理这些异常是必要的。 在提供的压缩包"LuceneOldSearch"中,可能包含了使用旧版本Lucene实现的一个...
### Lucene检索算法的改进 #### 检索系统采用的技术 在《Lucene检索算法的改进》一文中,作者们介绍了他们所采用的一系列技术来改进基于Lucene的检索系统。具体而言,这些技术包括: 1. **开放源代码的文本检索...
- **内存管理**:监控内存使用情况,避免因内存不足导致的性能下降或崩溃。 - **索引段优化**:定期进行索引段合并,减少索引的段数量,提高搜索效率。 - **文档更新**:如果存在实时更新的需求,需设计合适的更新...
在这个实例中,"4pm"可能是项目的某个阶段或时间点,也可能是压缩包中某个具体文件的名称,不过由于信息不足,无法详细解释。在实际应用中,这可能是一个包含代码、配置文件或其他资源的文件夹。 总结来说,构建...
这本书以幽默轻松的写作风格,深入浅出地介绍了Lucene的基础知识和实践应用,虽然在深度上可能稍显不足,但其详尽的代码注释对于初学者来说是非常有价值的参考资料。 在书中,作者首先从第1章开始介绍Lucene的基础...
2. 内存管理:合理配置JVM内存,避免因内存不足导致的性能下降。 3. 并行处理:利用多核CPU,通过设置线程池进行并行索引和搜索,提高处理效率。 4. 索引缓存:开启缓存机制,加快搜索速度,但要注意内存使用情况,...
在Lucene 1.4.1版本中,这些功能已经相对成熟,但相比后续版本,可能在性能和特性上有所不足。 ASP(Active Server Pages)是微软开发的一种服务器端脚本环境,用于创建动态网页或Web应用程序。在这个新闻发布系统...
然而,当面对大量文件或多个目录时,单线程的效率就显得不足。这时,我们可以引入多线程技术来并行处理任务,显著提升索引构建速度。 多线程创建索引的基本思路是将不同目录或文件分配给不同的线程进行处理。具体...
这种系统虽然能够满足基本的查询需求,但在用户体验方面存在明显不足: 1. **查询方式单一**:用户在进行文献查询时,通常需要明确指定查询条件,如按照作者、标题或关键词等进行搜索。这种模式较为繁琐,降低了...