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 文档。尽管NIOFSDirectory或MMapDirectory能够带来显著的性能提升,他们也有自己的问题。
filesystem-master基于文件系统的目录.比如
文件系统.它还定期将索引复制到源目录(aka copy 目录)。刷新周期的建议值是(至少) 50%,复制信息的时间要高于 3600 秒 - 60 分钟。
请注意,副本基于增量复制机制,减少了平均复制时间。
DirectoryProvider 通常用于 Jakarta Messaging 后端集群中的主节点。
buffer_size_on_copyBest 取决于您的操作系统和可用的 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 文档。尽管NIOFSDirectory或MMapDirectory可以大幅提升性能,但您也需要意识到这些问题。
filesystem-slave基于文件系统的目录.与
文件系统类似,但会定期检索主版本(来源)。为避免锁定和不一致的搜索结果,保留 2 个本地副本。刷新周期的建议值是(至少) 50%,复制信息的时间要高于 3600 秒 - 60 分钟。
请注意,副本基于增量复制机制,减少了平均复制时间。如果刷新周期为限时副本仍在进行中,则将跳过第二个复制操作。
DirectoryProvider 通常用于使用 Jakarta 消息传递后端的从节点。
buffer_size_on_copyBest 取决于您的操作系统和可用的 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 文档。尽管NIOFSDirectory或MMapDirectory可以大幅提升性能,您也需要意识到这些问题。
如果内置目录提供商不适合您的需要,您可以通过实施 org.hibernate.store.DirectoryProvider 接口来编写自己的目录提供商。在这种情况下,将您的提供程序的完全限定类名称传递到 directory_provider 属性。您可以使用前缀 hibernate.search.<indexname> 传递任何其他属性。