7.2.3. DirectoryProvider 配置


DirectoryProvider 是围绕 Lucene Directory 的 Hibernate 搜索抽象,处理底层 Lucene 资源的配置和初始化。目录提供程序及其属性显示了 Hibernate Search 中提供的目录提供程序的列表,以及对应的选项。

每个索引化实体都与 Lucene 索引关联(多个实体共享同一索引的情况除外)。索引的名称由 @Indexed 注释的 index 属性提供。如果未指定 索引 属性,则索引的类的完全限定名称将用作名称(推荐)。

DirectoryProvider 及任何其他选项都可使用前缀 hibernate.search.<indexname> 进行配置。名称 default (hibernate.search.default)保留,可用于定义适用于所有索引的属性。配置目录提供程序 显示如何使用 hibernate.search.default.directory_provider 将默认目录提供程序设置为文件系统。Hibernate.search.default.indexBase 设置索引的默认基础目录。因此,在 /usr/lucene/indexes/org.hibernate.example.Status 中创建实体 状态 索引。

但是,规则 实体的索引正在使用内存中目录,因为此实体的默认目录提供商将被属性 hibernate.search.Rules.directory_provider 覆盖

最后,Action 实体使用由 hibernate.search.Actions.directory_provider 指定的自定义目录供应商 CustomDirectoryProvider

指定索引名称

package org.hibernate.example;

@Indexed
public class Status { ... }

@Indexed(index="Rules")
public class Rule { ... }

@Indexed(index="Actions")
public class Action { ... }

配置目录提供程序

hibernate.search.default.directory_provider = filesystem
hibernate.search.default.indexBase=/usr/lucene/indexes
hibernate.search.Rules.directory_provider = ram
hibernate.search.Actions.directory_provider = com.acme.hibernate.CustomDirectoryProvider

注意

使用上述配置方案,您可以轻松定义常见的规则,如目录提供程序和基础目录,并在以后按索引覆盖这些默认值。

目录提供程序及其属性
ram
Filesystem

基于文件系统的目录.使用的目录为 <indexBase>/< indexName >

  • indexBase : base directory
  • indexName :覆盖 @Indexed.index(对于分片索引非常有用)
  • locking_strategy : 可选,请参阅 LockFactory 配置
  • filesystem_access_type :允许 确定此 DirectoryProvider 使用的 FSDirectory 实施的确切类型。允许的值为 auto (默认值,在非 Windows 系统上选择 NIOFSDirectory,Windows 上的 SimpleFSDirectory )、SimpleFSDirectory、 nio(NIOFSDirectory)mmap(MMapDirectory)。更改此设置之前,请参阅这些目录实施的 Java 文档。尽管 NIOFSDirectoryMMapDirectory 能够带来显著的性能提升,他们也有自己的问题。
filesystem-master

基于文件系统的目录.比如 文件系统.它还定期将索引复制到源目录(aka copy 目录)。

刷新周期的建议值是(至少) 50%,复制信息的时间要高于 3600 秒 - 60 分钟。

请注意,副本基于增量复制机制,减少了平均复制时间。

DirectoryProvider 通常用于 Jakarta Messaging 后端集群中的主节点。

buffer_size_on_copy Best 取决于您的操作系统和可用的 RAM;大多数用户使用 16 到 64MB 之间的值报告良好的结果。

  • indexBase: base directory
  • indexName :覆盖 @Indexed.index(对于分片索引非常有用)
  • sourceBase :源(复制)基础目录。
  • source :源目录后缀(默认为 @Indexed.index)。实际的源目录名称为 <sourceBase>/<source>
  • 刷新 :刷新周期(每次刷新秒将发生一次复制 )。如果在以下刷新期满时副本仍在进行中,则将跳过第二个复制操作。
  • buffer_size_on_copy :在单个低级复制指令中移动的 MegaBytes 数量;默认为 16MB。
  • locking_strategy : 可选,请参阅 LockFactory 配置
  • filesystem_access_type :允许 确定此 DirectoryProvider 使用的 FSDirectory 实施的确切类型。允许的值为 auto (默认值,在非 Windows 系统上选择 NIOFSDirectory,Windows 上的 SimpleFSDirectory )、SimpleFSDirectory、 nio(NIOFSDirectory)mmap(MMapDirectory)。更改此设置之前,请参阅这些目录实施的 Java 文档。尽管 NIOFSDirectoryMMapDirectory 可以大幅提升性能,但您也需要意识到这些问题。
filesystem-slave

基于文件系统的目录.与 文件系统 类似,但会定期检索主版本(来源)。为避免锁定和不一致的搜索结果,保留 2 个本地副本。

刷新周期的建议值是(至少) 50%,复制信息的时间要高于 3600 秒 - 60 分钟。

请注意,副本基于增量复制机制,减少了平均复制时间。如果刷新周期为限时副本仍在进行中,则将跳过第二个复制操作。

DirectoryProvider 通常用于使用 Jakarta 消息传递后端的从节点。

buffer_size_on_copy Best 取决于您的操作系统和可用的 RAM;大多数用户使用 16 到 64MB 之间的值报告良好的结果。

  • indexBase: Base directory
  • indexName :覆盖 @Indexed.index(对于分片索引非常有用)
  • SourceBase:源代码 (复制)基础目录。
  • Source: 源代码 目录后缀(默认为 @Indexed.index)。实际的源目录名称为 <sourceBase>/<source>
  • refresh :刷新周期(复制将每刷新秒发生一次)。
  • buffer_size_on_copy :在单个低级复制指令中移动的 MegaBytes 数量;默认为 16MB。
  • locking_strategy : 可选,请参阅 LockFactory 配置
  • retry_marker_lookup :可选,默认为 0。定义在失败前 Hibernate Search 检查源目录中标记文件的次数。在每次尝试之间等待 5 秒。
  • retry_initialize_period : 可选,以秒为单位设置整数值以启用重试初始化功能:如果从系统找不到主索引,它将再次尝试直到在后台找到它,而不阻止应用启动:在索引初始化前执行的完整Text 查询不会被阻断,而是返回空结果。如果不启用 选项或将其明确设置为零,它将失败,但有一个例外,而不是调度重试计时器。要防止应用程序在没有无效索引的情况下启动,但仍控制初始化超时,请参阅 retry_marker_lookup
  • filesystem_access_type :允许 确定此 DirectoryProvider 使用的 FSDirectory 实施的确切类型。允许的值为 auto(默认值,在非 Windows 系统上选择 NIOFSDirectory,Windows 上的 SimpleFSDirectory )、SimpleFSDirectory、 nio(NIOFSDirectory)mmap(MMapDirectory)。更改此设置之前,请参阅这些目录实施的 Java 文档。尽管 NIOFSDirectoryMMapDirectory 可以大幅提升性能,您也需要意识到这些问题。
注意

如果内置目录提供商不适合您的需要,您可以通过实施 org.hibernate.store.DirectoryProvider 接口来编写自己的目录提供商。在这种情况下,将您的提供程序的完全限定类名称传递到 directory_provider 属性。您可以使用前缀 hibernate.search.<indexname> 传递任何其他属性。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部