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

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

阅读更多

 



5. 尽可能的使用RAM

    原文 写道

 

Use as much RAM as you can afford.
More RAM before flushing means Lucene writes larger segments to begin with which means less merging later. Testing in LUCENE-843 found that around 48 MB is the sweet spot for that content set, but, your application could have a different sweet spot.

  

    在flush之前使用的RAM越多意味着segments越大, segments越大意味着以后需要合并的次数就越少。经  LUCENE-843 测试,发现对于内容集合来说,缓存设置为48MB时性能最好。不过,你的应用应该不是这个,呵呵.

 

   下面,看看高人的翻译

在你能承受的范围内使用更多的内存
在flush前使用更多的内存意味着Lucene将在索引时生成更大的segment,也意味着合并次数也随之减少。在Lucene-843中测试,大概48MB内存可能是一个比较合适的值。但是,你的程序可能会是另外一个值。这跟不同的机器也有一定的关系,请自己多加测试,选择一个权衡值。

 

6.关闭复合索引

 

Turn off compound file format.

Call setUseCompoundFile(false). Building the compound file format takes time during indexing (7-33% in testing for LUCENE-888). However, note that doing this will greatly increase the number of file descriptors used by indexing and by searching, so you could run out of file descriptors if mergeFactor is also large.

    
     调用setUseCompoundFile(false)方法可以关闭复合索引。从 LUCENE-888中的实验中可以看出,建立复合索引的时间大概是正常索引的7-33%。然后,这样做的后果是将大大增加了索引和搜索的文件数量,……

    在看看高人的翻译,这回简直是南辕北辙啊    
    写道
调用setUseCompoundFile(false)可以关闭复合文件选项。生成复合文件将消耗更多的时间(经过Lucene-888测试,大概会增加7%-33%的时间)。但是请注意,这样做将大大的增加搜索和索引使用的文件句柄的数量。如果合并因子也很大的话,你可能会出现用光文件句柄的情况。

 

    

      MegerFactor(合并因子)是控制segment合并频率的,其决定了一个索引块中包括多少个文档,当硬盘上的索引块达到多少时,将它们合并成一个较大的索引块。当MergeFactor值较大时,生成索引的速度较快。MergeFactor的默认值是10,建议在建立索引前将其设置的大一些。

    
7.复用Document and Field实例

原文 写道

Re-use Document and Field instances As of Lucene 2.3 there are new setValue(...) methods that allow you to change the value of a Field. This allows you to re-use a single Field instance across many added documents, which can save substantial GC cost. It's best to create a single Document instance, then add multiple Field instances to it, but hold onto these Field instances and re-use them by changing their values for each added document. For example you might have an idField, bodyField, nameField, storedField1, etc. After the document is added, you then directly change the Field values (idField.setValue(...), etc), and then re-add your Document instance.

Note that you cannot re-use a single Field instance within a Document, and, you should not change a Field's value until the Document containing that Field has been added to the index. See Field for details.

 
      尽量重用Document 和 Field实例。在lucene2.3中新增了setValue(...)方法,这个方法可以改变Field的value值。通过该方法将使得added 多个documents时只有一个Field实例就可以了,从而降低垃圾回收的代价。另外,最好也只建立一个Document实例,然后向Document实例添加多个Field实例,不过这些Field对象……
例如,你可能有一个idField,bodyField、ameField, storedField1等等。在这些文档被added之后,你可以直接改变Field的value(例如,调用idField.setValue(...),……),然后重新加入到你的文档实例中。

     请注意,你不能重用一个Field实例在一个Document实例中,并且你不应该改变Field的value直到包含该Field的value被添加到索引当中。更多,可以参看Field详情。

   看看,高人的翻译 

在lucene 2.3中,新增了一个叫setValue的方法,可以允许你改变字段的值。这样的好处是你可以在整个索引进程中复用一个Filed实例。这将极大的减少GC负担。
最好创建一个单一的Document实例,然后添加你想要的字段到文档中。同时复用添加到文档的Field实例,通用调用相应的SetValue方法改变相应的字段的值。然后重新将Document添加到索引中。
注意:你不能在一个文档中多个字段共用一个Field实例,在文档添加到索引之前,Field的值都不应该改变。也就是说如果你有3个字段,你必须创建3个Field实例,然后再之后的Document添加过程中复用它们。
 
   
   附上一段代码(不能运行)以供理解,不过这段代码复用了Field,但并未复用Document。

            writerFS = new IndexWriter(dirFS, new StandardAnalyzer(Version.LUCENE_30), true, MaxFieldLength.UNLIMITED);
            //
            Field f1 = new Field("f1", "", Store.YES, Index.ANALYZED);
            Field f2 = new Field("f2", "", Store.YES, Index.ANALYZED);
            for (int i = 0; i < 1000000; i++) {
                Document doc = new Document();
                f1.setValue("f1 hello doc" + i);
                doc.add(f1);
                f2.setValue("f2 world doc" + i);
                doc.add(f2);
                writer.addDocument(doc);
            }
//            writer.commit();
            writerFS.addIndexes(writer.getReader());
   
分享到:
评论

相关推荐

    lucene-search-开源

    它使用倒排索引技术,使得搜索速度极快,能够处理大量数据。在MediaWiki中集成Lucene,可以极大地提升用户的搜索体验,提供更精确、更快速的搜索结果。 MediaWiki的搜索功能默认是基于其内置的搜索算法,但对于大型...

    Lucene索引优化

    描述:在Lucene的wiki上,我们找到了一系列关于如何提升Lucene应用中索引速度的技巧与策略。这不仅涵盖了技术细节,还提供了实际操作建议,旨在帮助开发者针对特定场景优化其Lucene索引性能。 ### 知识点详细解析:...

    Wiki-Search-engine:维基搜索引擎

    9. **优化和性能**:包括索引构建的速度优化、查询响应时间的减少以及内存和磁盘空间的有效利用。 10. **用户界面**:虽然题目中没有明确提到,但一个完整的搜索引擎系统通常还包括用户友好的搜索界面,接收用户的...

    Wikipedia2Lucene:从HDFS导入Wikipedia XML转储到Lucene索引或Elasticsearch,并基于Lucene的MoreLikeThis查询检索类似的Wikipedia文章

    从HDFS导入Wikipedia XML转储到Lucene索引或Elasticsearch,并基于Lucene的MoreLikeThis查询检索类似的Wikipedia文章。 此应用程序是基于文本的文档相似性度量的实现,该度量被用作的研究中的基准度量。 将...

    Wiki-Search-Engine:涉及使用大小为 43 GB 的 2013 年数据转储在 Wikipedia Data Dump 上构建搜索引擎。 搜索结果实时返回

    2. 索引构建:索引是搜索引擎的核心,通过将预处理后的数据转换成便于快速查找的结构(如倒排索引),可以显著提升搜索速度。Java的Apache Lucene库就是用于创建高效索引的强大工具。 3. 查询处理:当用户输入查询...

    xwiki全文搜索lucene后台代码

    2. **索引优化**:除了实时索引,XWiki还提供了定期的索引优化功能,以提高搜索效率。这一步骤通常会合并多个段(segment)为一个大段,减少打开索引时的开销。关键类有`org.apache.lucene.index.IndexOptimize`。 ...

    lucence case study

    - **学术相关性调整**:提高检索结果的学术价值。 **技术栈**: - Lucene - Tapestry Rossetti Archive 是一个致力于收集和展示 Dante Gabriel Rossetti 及其家族作品的网站。为了实现这些目标,项目团队采用了 ...

    ASP.NET源码——[博客空间]ScrewTurn Wiki 2.0.37.zip

    8. **搜索和索引**:为了方便用户快速查找信息,ScrewTurn Wiki可能包含了一个搜索引擎,使用ASP.NET的搜索API或第三方库,如Lucene.NET,实现全文搜索和索引功能。 9. **国际化和本地化**:为了满足全球用户的需求...

    ASP.NET-[博客空间]外索维客.99.zip

    9. **搜索和索引**:为了方便用户查找信息,Wiki系统通常需要实现全文搜索功能。这可能涉及Lucene.NET这样的全文搜索引擎库。 10. **Ajax和jQuery**:为了提升用户体验,使用Ajax技术可以实现部分页面的异步更新,...

    2-8+Elasticsearch应用及平台建设实践.pdf

    在58集团的数据库部门中,Elasticsearch被用于多个业务场景,包括日志流水处理、用户标签画像、数据库二级缓存、安全风控行为数据、图数据库索引、监控数据检索以及Wiki文档搜索。随着业务规模的扩大,集群的数量和...

    CodeXCavator - code indexing and search-开源

    搜索和索引基于Apache Software Foundation的Lucene框架。 CodeXCavator也可以通过插件扩展。 详细的文档可以在项目的Wiki中找到。 注意:如果您有一些有趣的语法突出显示定义并将其发送给我,我将把它们集成到下一...

    Solr文档.pdf

    尽管单独使用Lucene实现站内搜索在索引维护、索引性能优化和搜索性能优化方面需要较大的开发工作量,而通过第三方搜索引擎接口实现站内搜索又会带来系统依赖紧密和扩展性较差的问题,但Solr提供了一个相对较好的解决...

    SMW SolrStore-开源

    Apache Solr 是一个基于 Lucene 的全文搜索服务器,它提供了一个高效、可扩展的搜索平台。Solr 支持多种数据源的索引,可以快速进行全文搜索、拼写纠错、高亮显示搜索结果等功能。由于 Solr 可以独立运行,也可以...

Global site tag (gtag.js) - Google Analytics