读书人

Hibernate Search(基于version3.4)-第

发布时间: 2012-08-27 21:21:56 作者: rapoo

Hibernate Search(基于version3.4)--第七章Index Optimization

?

Index Optimization

?

随着时间推移,Lucene index需要经过优化。这个过程实际上是文件的合并。在优化操作触发之前,Lucene文档删除操作只是标志删除的文档,并不会从物理上删除文档。在优化过程中,将会应用删除操作,也会影响Lucene Directory中文件的数量。

?

优化Lucene index可以提高搜索的速度,但对于更新操作是毫无效果的。在优化过程中,也可以进行搜索操作,但会显得有些慢。所有的index更新操作会被停止。它推荐schedule optimization:

?

?

在一个空闲的系统中或当搜索不频繁时。在大量index修改后当使用MassIndexer(see Section 6.3.2, “Using a MassIndexer”),它会在建立index过程中优化。也可以使用MassIndexer.optimizeAfterPurge和MassIndexer.optimizeOnFinish改变MassIndexer的表现
7.1. Automatic optimizationHibernate Search会在下面情景后自动地进行优化操作:在一定操作数后(插入,删除)在进行了一定事务处理数量后可以在全局级别或具体index级别上定义自动index优化配置:
FullTextSession fullTextSession = Search.getFullTextSession(regularSession);SearchFactory searchFactory = fullTextSession.getSearchFactory();searchFactory.optimize(Order.class);// orsearchFactory.optimize();
?第一个例子只优化Order索引,第二个例子,优化所有index。

?

Note:searchFactory.optimize()对JMS backend没有任何效果。你必须应用优化操作在Master端。

?

7.3. Adjusting optimization

Apache Lucene有一些参数影响优化过程的表现。Hibernate Search暴露了这些参数:

hibernate.search.[default|<indexname>].indexwriter.[batch|transaction].max_buffered_docshibernate.search.[default|<indexname>].indexwriter.[batch|transaction].max_merge_docshibernate.search.[default|<indexname>].indexwriter.[batch|transaction].merge_factorhibernate.search.[default|<indexname>].indexwriter.[batch|transaction].ram_buffer_sizehibernate.search.[default|<indexname>].indexwriter.[batch|transaction].term_index_interval

?

See Section 3.10, “Tuning Lucene indexing performance” for more details

?

?

?

?

?

?

?

?

?

读书人网 >软件架构设计

热点推荐