`
cfan_haifeng
  • 浏览: 119896 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

lucene-wiki翻译:如何提高索引速度-1

阅读更多

如何加快索引速度呢

    原文 写道

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

 

分享到:
评论

相关推荐

    lucene-core-7.7.0-API文档-中文版.zip

    包含翻译后的API文档:lucene-core-7.7.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-core:7.7.0; 标签:apache、lucene、core、中文文档、jar包、java; 使用方法:解压翻译后的API...

    lucene-core-7.2.1-API文档-中文版.zip

    包含翻译后的API文档:lucene-core-7.2.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-core:7.2.1; 标签:apache、lucene、core、中文文档、jar包、java; 使用方法:解压翻译后的API...

    lucene-analyzers-smartcn-7.7.0-API文档-中文版.zip

    包含翻译后的API文档:lucene-analyzers-smartcn-7.7.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-analyzers-smartcn:7.7.0; 标签:apache、lucene、analyzers、smartcn、中文文档...

    lucene-sandbox-6.6.0-API文档-中文版.zip

    包含翻译后的API文档:lucene-sandbox-6.6.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-sandbox:6.6.0; 标签:apache、lucene、sandbox、jar包、java、中文文档; 使用方法:解压...

    lucene-analyzers-common-6.6.0-API文档-中文版.zip

    包含翻译后的API文档:lucene-analyzers-common-6.6.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-analyzers-common:6.6.0; 标签:apache、analyzers、common、lucene、jar包、java...

    lucene-suggest-6.6.0-API文档-中文版.zip

    包含翻译后的API文档:lucene-suggest-6.6.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-suggest:6.6.0; 标签:apache、lucene、suggest、jar包、java、中文文档; 使用方法:解压...

    lucene-spatial3d-6.6.0-API文档-中文版.zip

    包含翻译后的API文档:lucene-spatial3d-6.6.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-spatial3d:6.6.0; 标签:spatial3d、apache、lucene、jar包、java、中文文档; 使用方法:...

    lucene-spatial3d-7.3.1-API文档-中英对照版.zip

    包含翻译后的API文档:lucene-spatial3d-7.3.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-spatial3d:7.3.1; 标签:apache、lucene、spatial3d、中英对照文档、jar包、...

    lucene-backward-codecs-7.3.1-API文档-中英对照版.zip

    包含翻译后的API文档:lucene-backward-codecs-7.3.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-backward-codecs:7.3.1; 标签:apache、lucene、backward、codecs、中英...

    lucene-core-6.6.0-API文档-中文版.zip

    包含翻译后的API文档:lucene-core-6.6.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-core:6.6.0; 标签:core、apache、lucene、jar包、java、中文文档; 使用方法:解压翻译后的API...

    lucene-analyzers-smartcn-7.7.0-API文档-中英对照版.zip

    包含翻译后的API文档:lucene-analyzers-smartcn-7.7.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-analyzers-smartcn:7.7.0; 标签:apache、lucene、analyzers、smartcn...

    lucene-spatial-extras-7.3.1-API文档-中英对照版.zip

    包含翻译后的API文档:lucene-spatial-extras-7.3.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-spatial-extras:7.3.1; 标签:apache、lucene、spatial、extras、中英对照...

    lucene-memory-6.6.0-API文档-中文版.zip

    包含翻译后的API文档:lucene-memory-6.6.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-memory:6.6.0; 标签:apache、memory、lucene、jar包、java、中文文档; 使用方法:解压翻译...

    lucene-suggest-7.7.0-API文档-中文版.zip

    包含翻译后的API文档:lucene-suggest-7.7.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-suggest:7.7.0; 标签:apache、lucene、suggest、中文文档、jar包、java; 使用方法:解压...

    lucene-spatial-extras-7.2.1-API文档-中英对照版.zip

    包含翻译后的API文档:lucene-spatial-extras-7.2.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-spatial-extras:7.2.1; 标签:apache、lucene、spatial、extras、中英对照...

    lucene-spatial-6.6.0-API文档-中文版.zip

    包含翻译后的API文档:lucene-spatial-6.6.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-spatial:6.6.0; 标签:apache、lucene、spatial、jar包、java、中文文档; 使用方法:解压...

    lucene-misc-6.6.0-API文档-中文版.zip

    包含翻译后的API文档:lucene-misc-6.6.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-misc:6.6.0; 标签:apache、lucene、misc、jar包、java、中文文档; 使用方法:解压翻译后的API...

    lucene-sandbox-7.2.1-API文档-中文版.zip

    包含翻译后的API文档:lucene-sandbox-7.2.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-sandbox:7.2.1; 标签:apache、lucene、sandbox、中文文档、jar包、java; 使用方法:解压...

    lucene-backward-codecs-6.6.0-API文档-中文版.zip

    包含翻译后的API文档:lucene-backward-codecs-6.6.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.lucene:lucene-backward-codecs:6.6.0; 标签:apache、codecs、lucene、backward、jar包、java、...

    lucene-spatial-extras-6.6.0-API文档-中英对照版.zip

    包含翻译后的API文档:lucene-spatial-extras-6.6.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.lucene:lucene-spatial-extras:6.6.0; 标签:apache、lucene、extras、spatial、jar包、...

Global site tag (gtag.js) - Google Analytics