本文来自网络,仅供参考学习!
1. 在大规模的应用中,Lucene更适合用于狭义的“搜索”,而不应当负责数据的存储。我们看看Lucene的源代码也可以知道,Document和Field的存储效率是不够好看的。手机之家的团队也发现了这一点,他们的办法是,用Lucene存放索引,用Memcache + Berkeley DB(Java Edition)负责存储。这样有两个好处,一是减小了Lucene的数据规模,提高了程序的效率;另一方面,这套系统也可以提供某些类似SQL的查询功能。实际上,Lucene Project自己似乎也注意到了这个问题,在Store中新增了一个db选项,其实也是利用的Berkeley DB。如果仅仅用Lucene存放索引,而不存放Document,并且合理配置,一台机器可以支持几十G甚至上百G的索引;如果需要用Lucene存放索引,最好在读取时使用FieldSelector,只读取需要的Field,如果使用恰当,性能会有10%左右的提升。
2. 在大规模应用中,Cache是非常重要的。PPT中也提到,可以在程序提供服务之前,进行几次”预热“搜索,填充Searcher的Cache。据我们(银杏搜索)的经验,也可以在应用程序中,再提供针对Document的Cache,这样对性能有较大的改善(同一个JVM内部的Cache,速度更快一些)。Lucene自己似乎也注意到了这个问题,在2.4版本中提供了Cache,并提供了一个LRU Cache实现。不过据我们测试,在极端情况下,这个Cache可能会突破大小限制,一路膨胀最后吃光内存,甚至从网络上找的许多LRU Cache实现在极端条件下都有可能出现这样的问题(这也是我们百思不得其解的地方:反复检查程序的逻辑都没有问题),最终自己写了一个LRU Cache,并修改多次,目前来看是稳定的。
3. 在编写Java服务程序的时候,记得设置退出的钩子函数(RunTime.getRunTime.addShutdownHook)是一个非常好的习惯。许多Java程序员都没有这种意识,或者有,也只是写一个finalize函数,结果程序非正常退出时,可能造成某些外部资源的状态不稳定。拿Lucene来说,之前的IndexWriter是默认autoCommit的,这样每添加一条记录,就提交一次,好处是如果中断,则之前添加的记录都是可用的,坏处则是,索引的速度非常低。在新版本中autoCommit默认为False,速度提升明显(我们测试的结果是,提高了大约8倍),但如果中途异常退出,则前功尽弃。如果我们添加了退出的钩子函数,捕获到退出信号则自动调用writer.close()方法,就可以避免这个问题。
4. 目前的Lucene是兼容JDK 1.4的,它的binary版本也是JDK1.4编译的,如果对性能要求比较高,可以自行下载Lucene Source Code,用更新版本的JDK编译出.jar文件,据我测试,速度大约有30%的提升。
5. 如果对并发的要求较高,可以考虑采用多IndexSearcher的技术,也就是在一个应用服务中,开启多个IndexReader(可以对同样的索引开启多个),每个IndexReader再生成一个IndexSearcher,将这些Searcher放在一个“池”里头,给搜索请求调用。这样可以大幅度提高并发的性能,代价是在写程序的时候就要考虑到这一点,进行相应的调整。
分享到:
相关推荐
标题中的“基于s2sh +mysql的 lucene大型网站的站内搜索实现”是指使用Struts2、Spring和Hibernate(通常简称为S2SH)框架与MySQL数据库相结合,利用Apache Lucene来构建一个大型网站的站内搜索引擎。这个项目旨在...
第2部分Lucene的应用,通过对Lucene内置工具的介绍,展示了Lucene技术的高级应用和在各种程序语言上的移植。. 本书既可作为学习材料,又可以作为参考手册。它适合于已经熟悉基本Java编程的读者,以及希望能够把强大...
要将Weblucene应用于你的网站,你需要遵循以下步骤: - **安装与配置**:下载Weblucene的源代码或二进制包,根据官方文档配置相关参数,如索引目录、日志设置等。 - **创建索引**:使用Weblucene提供的工具,抓取并...
【Lucene 4.7.0 全套JAR包详解】 Lucene是一个开源全文搜索引擎库,由Apache软件基金会开发并维护。...此外,对于大型应用,可能还需要结合Solr或Elasticsearch这样的分布式搜索服务来提升搜索性能和可扩展性。
【Lucene介绍】 Lucene是一个基于Java的全文检索库,由Apache软件基金会的Jakarta项目维护。...无论是小型网站还是大型企业级应用,都可以借助Lucene提升用户体验,提供准确、快速的信息查找能力。
《Apache Lucene 7.7.2:稳定与卓越的全文搜索引擎库》 Apache Lucene 是一个开源的全文搜索引擎库,被广泛应用于各种需要高效...无论是在小型项目还是大型企业级应用中,Lucene 都能成为构建强大搜索功能的理想选择。
11. **扩展性**:Lucene可以与其他项目结合,如Solr和Elasticsearch,以构建大型的分布式搜索解决方案。 12. **LuceneInAction源码**:这本书的源码包含了各种示例和实战案例,涵盖了从基础概念到高级特性的完整...
向上扩展是指使用大型共享存储服务器的部署应用,多处理系统,例如IBM、惠普和Sun这样的公司每一代人都投入巨资以建设更大、更好多处理系统。向外扩展是指使用多个小相互服务器应用程序的部署,网络集群,例如谷歌、...
如果你对Lucene感兴趣,可以参考官方文档、教程和社区资源,例如Apache Lucene的官方网站,以及你提到的博客链接(https://1151461406.iteye.com/blog/2388343),这个链接可能包含了一些实战案例和进阶知识。...
综上所述,Lucene作为Java开发中的一个强大工具,其功能丰富、灵活性高,无论是在小型项目还是大型企业级应用中,都能发挥出显著的作用。对于Java开发者来说,掌握Lucene的使用技巧,无疑能提升项目的搜索体验,增强...
- 在生产环境中,通常会使用 `FSDirectory` 而不是 `RAMDirectory`,因为后者只适合测试,不适合大型或持久化的索引。 通过以上步骤,你可以了解如何使用 Lucene.NET 创建和搜索简单的文本索引。在实际应用中,...
### Lucene简单应用知识点概述 #### 一、Lucene简介 - **搜索引擎的历史**:从最早的Archie和Gopher开始,到Robot(网络机器人)和Spider(网络爬虫)的出现,再到Excite、Galaxy、Yahoo等搜索引擎的发展,直至...
Lucene是Apache软件基金会...无论你是希望为网站添加搜索功能,还是构建大型的企业级搜索解决方案,Lucene都是值得信赖的选择。通过学习和使用Lucene源码,你可以更深入地理解全文检索的工作机制,提升自己的开发技能。
**Lucene组件详解** Lucene是一个高性能、全文...无论是小型项目还是大型企业级应用,Lucene都能提供可靠的文本搜索解决方案。在实际应用中,开发者应根据具体需求选择合适的分析器、优化策略,以实现最佳的搜索体验。
《Windows环境下Lucene 8.6.1的深度解析与应用》 Apache Lucene是一个开源全文搜索引擎库,它为开发者提供了强大的文本分析、索引和搜索...无论是在小型项目还是大型企业级应用中,Lucene都展现出了其不可或缺的价值。
Lucene提供了高级的文本分析、索引和搜索功能,是构建高效、可扩展的信息检索应用的基础。在Java的网络搜索实现中,Lucene扮演着至关重要的角色,它能够帮助开发者快速构建自己的搜索引擎。 在"lucene包"中,我们...
Apache Lucene是一个开源的全文检索库,被广泛应用于构建高效、可扩展的搜索功能。本文将深入探讨如何利用Lucene实现增量索引,这是一种在数据库或文件系统更新时仅对新数据或变化数据进行索引的技术,以降低资源...