7.7. 索引优化


Lucene 索引需要不时地进行优化。进程本质上是碎片整理。在触发优化前,Lucene 仅标记已删除的文档,不会应用物理文件。在优化过程中,将应用删除,这也会影响 Lucene 目录中的文件数量。

优化 Lucene 索引可以加快搜索速度,但不影响索引(更新)性能。在优化期间,可以执行搜索,但很有可能会减慢速度。所有索引更新都将停止。建议您调度优化:

优化 Lucene 索引可以加快搜索速度,但不影响索引更新性能。可以在优化过程中执行搜索,但它们比预期要慢。所有索引更新在优化过程中都会被保留。因此,建议调度优化:

  • 在空闲的系统上或搜索频率最低时。
  • 应用大量索引修改后。

MassIndexer 在处理开始和结束时默认优化索引。使用 MassIndexer.optimizeAfterPurgeMassIndexer.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
Copy to Clipboard Toggle word wrap

优化过程会立即触发 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
Copy to Clipboard Toggle word wrap

关键字 default 可用于选择 Hibernate Search 默认实施;启动时,.optimizer 键分隔符之后的所有属性都将传递给实施的初始方法。

7.7.2. 手动优化

您可以通过 SearchFactory 以编程方式从 Hibernate Search 优化(碎片)Lucene 索引:

示例:编程索引优化

FullTextSession fullTextSession = Search.getFullTextSession(regularSession);
SearchFactory searchFactory = fullTextSession.getSearchFactory();

searchFactory.optimize(Order.class);
// or
searchFactory.optimize();
Copy to Clipboard Toggle word wrap

第一个示例优化了保存顺序的 Lucene 索引,第二个示例优化了所有索引。

注意

searchFactory.optimize() 对 Jakarta 消息传递后端没有影响。您必须在 Master 节点上应用优化操作。

searchFactory.optimize() 应用到 master 节点,因为它不会影响 Jakarta Messaging 后端。

7.7.3. 调整优化

Apache Lucene 有几个参数可影响执行优化的方式。Hibernate Search 可公开这些参数。

进一步索引优化参数包括:

  • hibernate.search.[default|<indexname>].indexwriter.max_buffered_docs
  • hibernate.search.[default|<indexname>].indexwriter.max_merge_docs
  • hibernate.search.[default|<indexname>].indexwriter.merge_factor
  • hibernate.search.[default|<indexname>].indexwriter.ram_buffer_size
  • hibernate.search.[default|<indexname>].indexwriter.term_index_interval
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部