7.7. 索引优化
Lucene 索引需要不时地进行优化。进程本质上是碎片整理。在触发优化前,Lucene 仅标记已删除的文档,不会应用物理文件。在优化过程中,将应用删除,这也会影响 Lucene 目录中的文件数量。
优化 Lucene 索引可以加快搜索速度,但不影响索引(更新)性能。在优化期间,可以执行搜索,但很有可能会减慢速度。所有索引更新都将停止。建议您调度优化:
优化 Lucene 索引可以加快搜索速度,但不影响索引更新性能。可以在优化过程中执行搜索,但它们比预期要慢。所有索引更新在优化过程中都会被保留。因此,建议调度优化:
- 在空闲的系统上或搜索频率最低时。
- 应用大量索引修改后。
MassIndexer 在处理开始和结束时默认优化索引。使用 MassIndexer.optimizeAfterPurge
和 MassIndexer.optimizeOnFinish
更改此默认行为。如需更多信息,请参阅使用 MassIndexer。
7.7.1. 自动优化 复制链接链接已复制到粘贴板!
Hibernate 搜索可以在以下任一后自动优化索引:
Infinispan Query 在以下自动优化索引:
- 特定的操作(插入或删除)。
- 特定的交易量。
自动索引优化配置可以全局定义,也可以为每个索引定义:
示例:定义自动优化参数
hibernate.search.default.optimizer.operation_limit.max = 1000 hibernate.search.default.optimizer.transaction_limit.max = 100 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
索引:
-
添加和删除的数量达到
1000
。 -
事务数量达到
50
(hibernate.search.Animal.optimizer.transaction_limit.max
)具有高于hibernate.search.default.optimizer.transaction_limit.max
的优先级。
如果没有定义任何这些参数,则不会自动处理优化。
OptimizerStrategy 的默认实现可以被实现 org.hibernate.search.store.optimization.OptimizerStrategy
覆盖,并将 optimizer. implementation 属性
设置为实施的完全限定名称。此实施必须实施 接口(为公共类),并且具有不带任何参数的公共构造器。
示例:载入自定义 OptimizerStrategy
hibernate.search.default.optimizer.implementation = com.acme.worlddomination.SmartOptimizer hibernate.search.default.optimizer.SomeOption = CustomConfigurationValue hibernate.search.humans.optimizer.implementation = default
hibernate.search.default.optimizer.implementation = com.acme.worlddomination.SmartOptimizer
hibernate.search.default.optimizer.SomeOption = CustomConfigurationValue
hibernate.search.humans.optimizer.implementation = default
关键字 default
可用于选择 Hibernate Search 默认实施;启动时,.optimizer
键分隔符之后的所有属性都将传递给实施的初始方法。