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优化配置:
Properties代码 复制代码 收藏代码
  1. hibernate.search.default.optimizer.operation_limit.max = 1000
  2. hibernate.search.default.optimizer.transaction_limit.max = 100
  3. hibernate.search.Animal.optimizer.transaction_limit.max = 50
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
Java代码 复制代码 收藏代码
  1. FullTextSession fullTextSession = Search.getFullTextSession(regularSession);
  2. SearchFactory searchFactory = fullTextSession.getSearchFactory();
  3. searchFactory.optimize(Order.class);
  4. // or
  5. searchFactory.optimize();
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

 

posted @ 2013-04-30 15:35 眉间尺之魂 阅读(...) 评论(...) 编辑 收藏