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 optimization
Hibernate Search会在下面情景后自动地进行优化操作:
- 在一定操作数后(插入,删除)
- 在进行了一定事务处理数量后
可以在全局级别或具体index级别上定义自动index优化配置:
hibernate.search.default.optimizer.operation_limit.max = 1000 hibernate.search.default.optimizer.transaction_limit.max = 100 hibernate.search.Animal.optimizer.transaction_limit.max = 50
Animal index优化操作会因下面情形触发:
- 添加删除操作数超过1000
- 事务数量到过50。hibernate.search.Animal.optimizer.transaction_limit.max比hibernate.search.default.optimizer.transaction_limit.max有更高的优先级。
如果没有定义这些参数,将不会自动地进行优化操作。
7.2. Manual optimization
你也可以通过编程来优化一个Lucene index,这也要借助Hibernate Search的SearchFactory:
Example 7.2. Programmatic index optimization
FullTextSession fullTextSession = Search.getFullTextSession(regularSession); SearchFactory searchFactory = fullTextSession.getSearchFactory(); searchFactory.optimize(Order.class); // or searchFactory.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_docs
- hibernate.search.[default|<indexname>].indexwriter.[batch|transaction].max_merge_docs
- hibernate.search.[default|<indexname>].indexwriter.[batch|transaction].merge_factor
- hibernate.search.[default|<indexname>].indexwriter.[batch|transaction].ram_buffer_size
- hibernate.search.[default|<indexname>].indexwriter.[batch|transaction].term_index_interval
See Section 3.10, “Tuning Lucene indexing performance” for more details