7.2.5. 调优 Lucene 索引


7.2.5.1. 调优 Lucene 索引性能

Hibernate Search 用于通过指定传递给底层 Lucene IndexWriter (如 mergeFactor、 maxMergeDocs 和 maxBufferedDocs 的一组参数来调整 Lucene 索引性能。指定这些参数作为为所有索引应用、基于索引甚至每个分片的默认值。

有几个低级别 IndexWriter 设置可以针对不同的用例进行调整。这些参数按照 indexwriter 关键字分组:

hibernate.search.[default|<indexname>].indexwriter.<parameter_name>
Copy to Clipboard Toggle word wrap

如果没有在特定分片配置中为 索引写入器值 设置值,Hibernate Search 会检查 index 部分,然后在 default 部分。

下表中的配置将导致这些设置应用于 Animal 索引的第二个分片

  • max_merge_docs = 10
  • merge_factor = 20
  • ram_buffer_size = 64MB
  • term_index_interval = Lucene default

所有其他值将使用 Lucene 中定义的默认值。

所有值的默认值都是保留为 Lucene 自己的默认值。索引性能和行为属性中列出的值取决于您使用的 Lucene 版本。显示的值相对于版本 2.4

注意

以前版本的 Hibernate Search 具有 批处理事务 属性的概念。情况已不再如此,因为后端始终使用相同的设置执行工作。

Expand
表 7.4. 索引性能和行为属性
属性描述默认值

hibernate.search.[default|<indexname>].exclusive_index_use

当其他进程不需要写入同一索引时,设置为 true。这可让 Hibernate 搜索在索引上以独占模式工作,并在写入索引更改时提高性能。

True (提高性能,仅在关机时发布锁定)

hibernate.search.[default|<indexname>].max_queue_length

每个索引都有一个单独的"pipeline",其中包含要应用到索引的更新。当此队列满时,向队列添加更多操作将变为阻止操作。除非 worker.execution 配置为 async,否则配置此设置没有太大意义。

1000

hibernate.search.[default|<indexname>].indexwriter.max_buffered_delete_terms

确定应用和清空缓冲区内删除术语前所需的最小删除术语数量。如果当时内存中有被缓冲的文档,则它们会被合并并创建新的网段。

禁用(按 RAM 使用情况清空)

hibernate.search.[default|<indexname>].indexwriter.max_buffered_docs

控制索引期间内存中缓冲的文档数量。消耗的 RAM 量越大。

禁用(按 RAM 使用情况清空)

hibernate.search.[default|<indexname>].indexwriter.max_merge_docs

定义片段中允许的最大文件数。较小的值在经常更改索引时表现更好,如果索引不经常改变,更大的值可以提供更好的搜索性能。

无限(Integer.MAX_VALUE)

hibernate.search.[default|<indexname>].indexwriter.merge_factor

控制片段合并频率和大小。

确定插入时段索引的合并频率。使用较小的值时,索引和搜索未优化索引时会使用较少的 RAM,但索引速度较慢。当值较大时,索引期间会使用更多的 RAM,而搜索未优化索引时速度较慢,索引速度也更快。因此,较大的值(> 10)最适合创建批处理索引,更适合以互动方式维护的索引的更小的值(< 10)。该值不能低于 2。

10

hibernate.search.[default|<indexname>].indexwriter.merge_min_size

控制片段合并频率和大小。在下一个片段合并操作中始终考虑小于这个大小的片段(以 MB 为单位)。设置这个太大可能会导致合并操作昂贵,即使它们的频率较低。See also org.apache.lucene.index.LogDocMergePolicy.minMergeSize.

0 MB(实际为 ~1K)

hibernate.search.[default|<indexname>].indexwriter.merge_max_size

控制片段合并频率和大小。

大于这个大小的片段(以 MB 为单位)永远不会合并到更大的网段。

这有助于降低内存要求并避免以最佳搜索速度为代价进行一些合并操作。在优化索引时,这个值将被忽略。

See also org.apache.lucene.index.LogDocMergePolicy.maxMergeSize.

无限

hibernate.search.[default|<indexname>].indexwriter.merge_max_optimize_size

控制片段合并频率和大小。

即使优化索引,大于这个大小的片段(以 MB 为单位)也不会合并(请参阅 merge_max_size 设置)。

Applied to org.apache.lucene.index.LogDocMergePolicy.maxMergeSizeForOptimize.

无限

hibernate.search.[default|<indexname>].indexwriter.merge_calibrate_by_deletes

控制片段合并频率和大小。

设置为 false,在估算合并策略时不考虑删除的文档。

应用到 org.apache.lucene.index.LogMergePolicy.calibrateSizeByDeletes.

true

hibernate.search.[default|<indexname>].indexwriter.ram_buffer_size

控制专用于文档缓冲区的 RAM 量(以 MB 为单位)。在一起使用 max_buffered_docs 时,会首先进行刷新(以此类事件为准)。

通常,为了提高索引性能,最好使用 RAM 刷新,而不是按文档计数进行清除,并使用尽可能大的 RAM 缓冲区。

16 MB

hibernate.search.[default|<indexname>].indexwriter.term_index_interval

设置索引术语之间的间隔。

较大的值会导致 IndexReader 使用的内存减少,但随机访问速度较慢。Small 值会导致 IndexReader 使用更多内存,并加快对术语的随机访问。详情请查看 Lucene 文档。

128

hibernate.search.[default|<indexname>].indexwriter.use_compound_file

使用复合文件格式的优点是使用较少的文件描述符。缺点是索引需要更长的时间和临时磁盘空间。您可以在改进索引时间时将此参数设置为 false,但如果 mergeFactor 也 较大,则可能会耗尽文件描述符。

布尔值参数,使用 truefalse。这个选项的默认值为 true

true

hibernate.search.enable_dirty_check

并非所有实体更改都需要 Lucene 索引更新。如果没有索引所有更新的实体属性(脏属性),Hibernate Search 将跳过重新索引的过程。

如果您使用需要在每次更新事件中调用的自定义 FieldBridges (即使没有更改该字段桥接的属性),请禁用这个选项。

此优化不应用于使用 @ClassBridge 或 @ DynamicBoost 的类。

布尔值参数,使用 truefalse。这个选项的默认值为 true

true

警告

黑色后端 不应在生产环境中使用,而是仅作为识别索引瓶颈的工具。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat