如何加快索引速度呢
原文 写道
Here are some things to try to speed up the indexing speed of your Lucene application. Please see ImproveSearchingSpeedfor how to speed up searching.
有时,我们需要加快索引的速度,可以从以下入手(建议参考ImproveSearchingSpeed)
原文 写道
Be sure you really need to speed things up. Many of the ideas here are simple to try, but others will necessarily add some complexity to your application. So be sure your indexing speed is indeed too slow and the slowness is indeed within Lucene.
首先确定是否真的有必要提高索引速度。这是因为,提高索引速度的方法可能会很复杂(当然有些也很简单,但未必合用)。所以,你的第一要务是确定是否你的索引真的很慢,并且造成索引慢的原因确实是lucene,而不是数据库操作、IO操作等……
如果你真的确定需要提高索引速度,可以看看下面的内容,它可以帮助你。
1.确保使用最新的Lucene版本.
2. 用本地文件系统。
原文 写道
Use a local filesystem. Remote filesystems are typically quite a bit slower for indexing. If your index needs to be on the remote fileysystem, consider building it first on the local filesystem and then copying it up to the remote filesystem.
用本地文件系统。在远程文件系统上建立所以是十分慢的。如果你需要在远程文件系统上建立索引,可以考虑首先在本地建立索引,然后在复制到远程文件系统中去。
不好意思,2重了
2.提升硬件,尤其是IO系统的硬件
原文 写道
Get faster hardware, especially a faster IO system. If possible, use a solid-state disk (SSD). These devices have come down substantially in price recently, and much lower cost of seeking can be a very sizable speedup in cases where the index cannot fit entirely in the OS's IO cache.
提升硬件,尤其是IO系统的硬件. 如果可能的话,尽量使用固态硬盘 (SSD)。这些设备越来越便宜了……
3.仅打开一个写入器(IndexWriter),并在索引会话期间重用她。
原文 写道
Open a single writer and re-use it for the duration of your indexing session.
仅打开一个写入器(IndexWriter),并在索引会话期间重用她。
4.根据内存使用情况而不是已经索引文档个数来刷新(写入到磁盘)
原文 写道
Flush by RAM usage instead of document count.
For Lucene <= 2.2: call writer.ramSizeInBytes() after every added doc then call flush() when it's using too much RAM. This is especially good if you have small docs or highly variable doc sizes. You need to first set maxBufferedDocs large enough to prevent the writer from flushing based on document count. However, don't set it too large otherwise you may hit LUCENE-845. Somewhere around 2-3X your "typical" flush count should be OK.
For Lucene >= 2.3: IndexWriter can flush according to RAM usage itself. Call writer.setRAMBufferSizeMB() to set the buffer size. Be sure you don't also have any leftover calls to setMaxBufferedDocs since the writer will flush "either or" (whichever comes first).
大家知道,IO操作是非常慢的,而RAM则快了非常之多。所以Lucene在建立索引的时候通常先把索引写入到内存当中,等达到一定数量后在写入到磁盘中,以提升索引速度。所以这里的问题变成了:何时或者什么情况下写入磁盘呢?
有两种方式,第一种:计算文档个数,例如当在RAM中索引了100个文档后,我就将RAM中的索引写入到磁盘中。
第二种,根据 RAM 情况,如果感觉RAM还挺多,就继续写入到RAM中;否则就写到磁盘中。
总结:显然第二种智能多了;第一种,不好说了,或许有些机器10000个都不多,有些1000个就不行了,呵呵。
我的蹩脚的翻译,呵呵 写道
对于Lucene<=2.2的版本:当Lucene占用太多内存(RAM)的时候,我们可以再每个“added doc” 之后调用 writer.ramSizeInBytes() 方法,接着调用flush()方法。如果你要索引的文档(docs )很小或者highly variable doc sizes,这种方式将非常好。为了防止写入器(writer )达到某个文档个数时就写入磁盘,你需要首先把maxBufferedDocs设置的足够大。但也不要设置的过大,可以参考LUCENE-845 。通常,按照 2-3X这个公式去刷新应该就可以。
在看看高人的翻译,差距啊。99%普通 100%专家啊
在Lucene 2.2之前的版本,可以在每次添加文档后调用 writer.ramSizeInBytes() 方法,当索引占用过多的内存时,然后在调用flush()方法。这样做在索引大量小文档或者文档大小不定的情况下尤为有效。你必须先把maxBufferedDocs参数设置足够大,以防止writer基于文档数量flush。但是注意,别把这个值设置的太大,否则你将遭遇Lucene-845号BUG。不过这个BUG已经在2.3版本中得到解决。
PS: 关于maxBufferedDocs 之流,可以网上说的很多,可以看看这个:lucene3.0_和IndexWriter有关的几个参数设置及重建索引注意事项。
对于Lucene >= 2.3 的版本,IndexWriter 他自己就可以根据RAM 使用情况来刷新(写入磁盘)。可以通过 writer.setRAMBufferSizeMB()来设置缓存大小。当你打算按照内存大小flush后,确保没有在别的地方设置MaxBufferedDocs值。否则flush条件将变的不确定(谁先符合条件就按照谁)。
下接:lucene-wiki翻译:如何提高索引速度-2
分享到:
相关推荐
它使用倒排索引技术,使得搜索速度极快,能够处理大量数据。在MediaWiki中集成Lucene,可以极大地提升用户的搜索体验,提供更精确、更快速的搜索结果。 MediaWiki的搜索功能默认是基于其内置的搜索算法,但对于大型...
描述:在Lucene的wiki上,我们找到了一系列关于如何提升Lucene应用中索引速度的技巧与策略。这不仅涵盖了技术细节,还提供了实际操作建议,旨在帮助开发者针对特定场景优化其Lucene索引性能。 ### 知识点详细解析:...
1. **倒排索引**:倒排索引是一种数据结构,用于快速定位文档中的关键词。每个词会在索引中关联一个列表,列出包含该词的所有文档的标识。在搜索引擎中,倒排索引允许快速找出包含特定查询词的文档。 2. **PageRank...
从HDFS导入Wikipedia XML转储到Lucene索引或Elasticsearch,并基于Lucene的MoreLikeThis查询检索类似的Wikipedia文章。 此应用程序是基于文本的文档相似性度量的实现,该度量被用作的研究中的基准度量。 将...
1. 并行处理:Java的并发框架如ExecutorService和Future,使得数据处理和索引构建可以在多核CPU上并行进行,大大提高了处理速度。 2. 内存管理:Java虚拟机(JVM)的垃圾回收机制使得开发者无需关心内存的分配和...
1. **索引构建**:当用户创建或更新文档时,XWiki会调用Lucene的相关API,对文档内容进行分析和分词,然后将这些分词作为索引项存储到索引库中。这个过程涉及到的主要类有`org.xwiki.search.lucene....
- **学术相关性调整**:提高检索结果的学术价值。 **技术栈**: - Lucene - Tapestry Rossetti Archive 是一个致力于收集和展示 Dante Gabriel Rossetti 及其家族作品的网站。为了实现这些目标,项目团队采用了 ...
8. **搜索和索引**:为了方便用户快速查找信息,ScrewTurn Wiki可能包含了一个搜索引擎,使用ASP.NET的搜索API或第三方库,如Lucene.NET,实现全文搜索和索引功能。 9. **国际化和本地化**:为了满足全球用户的需求...
1. **ASP.NET页面生命周期**:理解ASP.NET页面从加载到呈现的过程,包括初始化、加载、验证、呈现和卸载等阶段,这对于实现Wiki页面的动态行为至关重要。 2. **控件和事件处理**:ASP.NET提供了丰富的服务器控件,...
搜索和索引基于Apache Software Foundation的Lucene框架。 CodeXCavator也可以通过插件扩展。 详细的文档可以在项目的Wiki中找到。 注意:如果您有一些有趣的语法突出显示定义并将其发送给我,我将把它们集成到下一...
尽管单独使用Lucene实现站内搜索在索引维护、索引性能优化和搜索性能优化方面需要较大的开发工作量,而通过第三方搜索引擎接口实现站内搜索又会带来系统依赖紧密和扩展性较差的问题,但Solr提供了一个相对较好的解决...
在58集团的数据库部门中,Elasticsearch被用于多个业务场景,包括日志流水处理、用户标签画像、数据库二级缓存、安全风控行为数据、图数据库索引、监控数据检索以及Wiki文档搜索。随着业务规模的扩大,集群的数量和...
1. **索引器**:负责将 Mediawiki 的页面内容、属性和链接等信息转换为 Solr 可理解的格式,并更新 Solr 索引。 2. **查询处理器**:处理用户的查询请求,将其转化为 Solr 查询语言(SOLRQl),并返回结果。 3. **...