出于需要,再次使用lucene,之前毕设用的这个(1.4.3版本),现在用的很多api(3.3.0)还查不多,只是说有些惯用法不一样了,这里记录下。
1:关于分词,可以去这里参考下
http://www.open-open.com/74.htm
分词组件用的JE上的IK分词,也是经过多方考虑才使用这个,需要确保一点是,索引和搜索的时候2个分析器要使用一样的,之前自作聪明得用了lucene自带的空格分词器结果and操作就有问题。
如果之前有用过JE分词的话,也还记得这个东西,之前在open-open上有的,现在已经下架了,最后的版本是1.5.3
2:关于索引优化方面
IndexWriter 这个类的所有方法都是线程安全的,具体见javadoc
<a name="thread-safety"></a><p><b>NOTE</b>: {@link
IndexWriter} instances are completely thread
safe, meaning multiple threads can call any of its
methods, concurrently. If your application requires
external synchronization, you should <b>not</b>
synchronize on the <code>IndexWriter</code> instance as
this may cause deadlock; use your own (non-Lucene) objects
instead. </p>
所以可以多线程的使用addDoc操作,这个具体的线程还依赖一个因子maxThreadStates,这个的默认值是8
/** The maximum number of simultaneous threads that may be
* indexing documents at once in IndexWriter; if more
* than this many threads arrive they will wait for
* others to finish. */
public final static int DEFAULT_MAX_THREAD_STATES = 8;
不过如果你的机器核数不超过8的话,这个值可以不用修改了,已经足够使用了。
参考下 wiki
How to make indexing faster
http://wiki.apache.org/lucene-java/ImproveIndexingSpeed
我们可以做的是 设置RAMBuffer的大小,这个大小不是说越大越好,也需要考虑实际情况,一般是最大文件的2倍就查不多了,默认值是16M ,可以利用 setRAMBufferSizeMB 来设置大小。
3:关于搜索
参考下wiki
How to make searching faster
http://wiki.apache.org/lucene-java/ImproveSearchingSpeed
1)Open the IndexReader
with readOnly=true
2)using NIOFSDirectory instead of FSDirectory.
4:针对索引更新,我这里是一天一更新,不需要做实时更新,实时更新可以考虑其他的如solr的实现等等,一天一更新,采取的策略是,新索引建立好了以后直接替换 索引和 搜索的对象实例,老的索引数据删除,引用之间的替换可以说是瞬间完成,所以如果实时索引在其他机器,当新的搜索器建立好了,可以瞬间替换的。
分享到:
相关推荐
2. 可扩展性:Lucene支持多线程索引和查询,可以方便地集成到分布式系统中,满足大数据量的处理需求。 3. 灵活性:Lucene提供了一套完整的API,开发者可以根据需要自定义分词器、评分策略等,实现个性化的全文检索...
**Lucene 全文检索案例** ...然而,实际应用中可能还需要考虑诸如多线程安全性、分布式搜索、近实时搜索(NRT)等高级特性。持续学习和实践,你将能更好地掌握Lucene的精髓,实现高效、精准的全文检索解决方案。
在实际应用中,你可能需要进一步学习如何优化查询性能、处理多线程和并发、以及实现更复杂的查询逻辑。Lucene.NET是一个强大的工具,适用于各种需要全文搜索的场景,从简单的网站搜索到复杂的企业级应用程序。通过...
本项目以"多线程搜索引擎java实现源代码"为标题,旨在介绍如何使用Java编程语言构建一个具备多线程特性的搜索引擎。这个搜索引擎可以抓取网络上的信息,存储网页快照,并建立索引,以便用户快速查询所需内容。下面...
- 多线程处理:利用多线程进行索引构建和查询,提高系统性能。 总结,Lucene 3.5作为一个强大的全文检索工具,提供了高效、灵活的解决方案。通过理解其核心概念和功能,结合实际案例进行实践,我们可以快速地在自己...
7. **性能优化**:为了提高搜索效率,可能采用了多线程索引和搜索,以及内存缓存等技术。 8. **扩展性**:考虑到知识库的持续增长,系统可能还设计了良好的扩展性,如支持分布式搜索、多索引管理等。 通过分析和...
Lucene 5.2.1 版本还引入了一些改进和修复,比如更好的性能、内存使用优化以及对多线程的支持。通过熟练掌握这些基本操作,你可以构建出自己的全文搜索引擎,满足各种复杂的需求。 在学习过程中,参考提供的教程...
2. 性能优化:缓存策略、内存管理、多线程并行处理等,以提升搜索速度和系统性能。 3. 高级查询:组合查询、模糊匹配、短语查询等,丰富查询语法,满足复杂检索需求。 通过深入学习和实践Lucene 2.2的源代码,...
1. **多线程索引**:为了加快索引速度,可以利用多线程并行处理文档。 2. **块级并发**:LUCENE支持在索引过程中对不同段进行并发操作,进一步提高效率。 3. **内存管理**:合理设置缓存大小,避免因内存过大导致...
3. **多线程**:支持并行爬取,提高数据获取效率。 4. **保存状态**:能够记录爬取进度,便于在中断后继续爬取。 压缩包中的“光盘使用说明.DOC”可能包含了如何使用这些工具的具体步骤、示例代码以及注意事项。...
Lucene.Net.DemoLib.dll展示了如何在多线程环境中安全地使用Lucene.NET。 7. **异常处理与日志**:示例库还包含异常处理的最佳实践,以及如何记录和监控日志信息,这对于调试和维护系统至关重要。 总的来说,...
此外,多线程索引和查询处理是提高系统吞吐量的关键,同时还需要注意避免竞态条件和其他并发问题。这一章可能还会涵盖如何利用缓存技术来提升用户体验,以及如何通过监控和日志记录来诊断和解决性能问题。 书内CD...
同时,开发者还需要考虑如何处理用户界面、权限控制、多线程安全等问题,以构建完整的全文搜索引擎解决方案。 总之,Lucene.NET是.NET开发者构建全文搜索引擎的强大工具,结合ChineseAnalyzer,能够有效地处理中文...
- **多线程支持**:能够同时处理多个请求,提高爬取效率。 #### 2.2 Heritrix的工作流程 1. **定义爬取范围**:确定要爬取的网站或网页列表。 2. **配置爬取规则**:设置URL过滤器、爬取深度限制等参数。 3. **启动...
Lucene.NET支持多线程操作,可以在多个线程间安全地读写索引。同时,提供索引优化(Merge)功能,合并多个段为一个大段,以提高搜索效率。 ### 9. 实例应用 Lucene.NET常用于构建搜索应用,如网站内部搜索、日志...
- 多线程处理:利用多线程加速索引和搜索操作。 - 定期更新与维护:定期重建索引,以保持最新的数据。 6. **总结** Lucene 4.6是一个强大且灵活的全文检索工具,通过深入理解和实践LuceneDemo,开发者可以掌握其...
- 在多线程环境下,Lucene.NET提供了适当的同步机制,确保在并发操作下数据的一致性和完整性。 9. **分布式搜索** - 虽然本源码主要关注单机实现,但Lucene.NET也能与其他技术(如Solr)结合,实现分布式搜索,...
为了应对大数据量的索引,Lucene支持多线程索引和分布式搜索,例如通过Solr或Elasticsearch这样的分布式搜索引擎平台。 在实际应用中,我们还需要考虑一些优化策略,如合理设置缓存大小、选择合适的分析器、定期...
同时,考虑使用多线程来加速索引创建。 3. **查询性能**: 适当使用Filter和Query组合,减少不必要的文档扫描,提升查询速度。 4. **搜索体验**: 提供相关性高的搜索建议,支持拼写纠错,以增强用户满意度。 总结...