转:http://blog.csdn.net/pwlazy/article/details/1511097
http://blog.csdn.net/pwlazy/article/category/225768 lucene
背景:单线程为30万条数据建索引花了10分钟,为了提高效率采用多线程
起初我采用多个线程共享一个indexwriter实例(也意味着往同一个目录写索引),这是
lucene in action 和lucene wiki的推荐做法,不知道到为什么总是报FileNotFoundException,
很让人困惑。偶尔会成功一次。这个错误让我想起另外一个问题,就是在建索引的时候搜索也会报这个
错误,lucene in action 明明也说了建索引读的时候没问题。
言归正传,我第二次尝试使用每个线程单独拥有自己的indexwriter实例,但往同一个目录写索引,果然报了
写锁的错, 这和书上说的很一致。
最后没办法了,我使用每个线程单独使用自己的实例,往自己的目录写索引,最后一个干完的线程将所有的索引合并
比如我开了4个线程,那么就有5个目录build_index,build_index1,build_index2,build_index3,build_index4
线程1往build_index1中写,线程2往build_index2,。。。依次类推,最后一个干完的将build_index1-4目录的索引合并到
build_index.
我开了4个线程尝试发现也要花大概7-8分钟,合并索引的过程非常快20秒左右。
开了10个线程,整个过程需要6分多钟,合并索引也只花了21秒。
似乎效果并不明显,这因该是因为数据量还不够大引起的,数据量越大,并行的优势会越明显
可见合并索引的过程非常快,这又提供了另外的好处,我们通常将build_index作为搜索目录,就像上面说的那样,建索引的过程 会影响搜索(虽然按照书上说是不影响的),如果我们采用这种方案,建索引的绝大部分过程其实与build_index目录无关,只有最后 合并的时候需要用到build_index,但那个过程又非常的快速,所以可以极大的缓解建索引给搜索带来的问题。
顺便说:当然你也可以再开一个通知线程专门等待索引线程,当索引线程完毕之后加入通知线程的队列,通知线程发现自己的队列有通知记录就开始合并索引,这样就不用所有的线程完毕之后才开始合并索引。(这种方案待尝试)
如果条件允许,你可以扩展一下这个方案,将多线程索引升级为多台机器同时建。
相关推荐
### Lucene并行索引关键技术解析 #### 一、引言 随着互联网的快速发展,海量信息的管理和检索成为了重要的挑战。传统的单机索引方法已无法满足高效处理大规模数据的需求,尤其是在搜索引擎领域。Lucene作为一款...
索引技术是搜索引擎的基础,Lucene是实现这一技术的一种框架,而分布式并行索引则是一种创新的解决方案,能够解决传统搜索引擎在处理大规模数据时的性能瓶颈。 在本研究中,研究者们从多个维度出发,通过深入的理论...
二、Zoie:近实时索引的解决方案 Zoie(Zero-Offset Indexing Engine)是一个基于Lucene的实时索引框架,它通过将索引分片并行处理,实现了在不影响搜索性能的同时,对新数据进行即时索引。Zoie的核心理念是将索引...
在IT领域,Lucene和POI是两个非常重要的开源库,它们分别用于全文搜索引擎和处理Microsoft Office文件。本文将深入探讨如何结合Lucene...通过深入理解并实践这两个库,开发者可以构建出高效、灵活的文本处理解决方案。
**Lucene.net 知识点详解** Lucene.net 是 Apache Lucene 的 .NET 版本,它是一个开源、高性能、全文检索库,适用于各种 .NET 应用程序...理解并熟练运用这些概念,可以帮助开发者构建高效、灵活的全文搜索解决方案。
总结来说,Lucene 4.6.0是一个强大且高效的全文检索库,它提供了一整套完整的解决方案,包括文档管理、索引构建、查询解析和结果排名等。对于需要在应用中实现复杂搜索功能的开发者来说,Lucene 4.6.0无疑是一个值得...
为了有效地管理和利用这些海量数据,我们需要强大的数据索引、搜索和存储解决方案。这里我们将深入探讨一个基于Apache Lucene和Hadoop分布式文件系统(HDFS)的系统,该系统能够应对大规模数据的挑战。 Apache ...
Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,被广泛应用于各种搜索引擎和站内搜索解决方案中。它提供了丰富的文本分析、索引和搜索功能,使得开发者能够轻松地在自己的应用程序中实现复杂的全文检索...
《电信设备-海量数据信息索引系统和索引构建方法》是针对现代电信行业中日益增长的数据处理需求而提出的一种高效解决方案。在这个信息化时代,电信运营商每天都会产生和处理海量的数据,包括用户行为数据、网络性能...
对于大型数据集,Lucene 提供了Solr和Elasticsearch等分布式搜索解决方案。尽管这不是4.6.1版本直接包含的内容,但文档会介绍如何将单机Lucene应用扩展到分布式环境。 9. **API参考**: 官方文档包含了详尽的API...
无论是在企业级应用还是个人项目中,理解并掌握Lucene的原理和实践,都将有助于构建高效的文本搜索解决方案。通过深入学习和实践,开发者可以充分利用Lucene的强大功能,实现高效、精准的全文检索。
综上所述,Lucene提供了一套完整的文本搜索解决方案,从建立索引到执行搜索,再到结果展示,都具有高度灵活性和可扩展性。在实际应用中,开发者可以根据需求选择合适的分析器、查询策略和优化手段,构建高效、精确的...
五、挑战与解决方案 1. 大规模数据处理:面对海量数据,需要考虑如何有效地分片和分布索引。 2. 多语言支持:处理多种语言的文档,需要适配不同的分词器。 3. 安全性:防止恶意搜索,可能需要对搜索请求进行过滤和...
Lucene作为Apache软件基金会的一个开源项目,是Java领域内最著名的全文搜索引擎库,而IKAnalyzer则是针对中文分词的优秀解决方案。本篇文章将详细介绍如何利用Lucene4.0和IKAnalyzer2012来构建一个高性能的中文全文...
**Lucene组件详解** Lucene是一个高性能、全文...无论是小型项目还是大型企业级应用,Lucene都能提供可靠的文本搜索解决方案。在实际应用中,开发者应根据具体需求选择合适的分析器、优化策略,以实现最佳的搜索体验。
《基于LUCENE的搜索引擎...通过合理的架构设计和优化,我们可以创建出高效、灵活的搜索解决方案,满足各类信息检索需求。而提供的源代码正是实现这一目标的具体实践,对于学习和研究LUCENE搜索引擎有着极大的参考价值。
《深入剖析Lucene 2.2:源码...通过深入学习和实践Lucene 2.2的源代码,开发者可以更深入地理解信息检索原理,定制适合自己应用场景的搜索解决方案。同时,随着Lucene后续版本的演进,许多新特性也值得我们关注和研究。
8. **扩展性**:Lucene可以与其他技术结合,如Solr和Elasticsearch,提供更高级的企业级搜索解决方案。 9. **性能优化**:包括内存管理、磁盘I/O优化、并行处理等策略,以提高搜索性能。 **《Lucene_in_Action》...
- **优化技巧**:包括使用多线程并行索引、调整缓存策略、选择合适的分析器、优化查询语法等,可以进一步提升Lucene的性能。 **学习资源** 1. 官方文档:Apache Lucene 提供详尽的官方文档,是学习Lucene的首要...