1.Enabling Hibernate Search
默认Hibernate Core自动在classpath中查找运行。
设置hibernate.search.autoregister_listeners为false可以禁止此功能。
2.Automatic indexing
默认对象更新,插入,删除时自动索引(直接在数据库插入数据无效)
设置hibernate.search.indexing_strategy为manual可以手工索引(索引只读或想批量更新时可用)
3.Directory configuration
被索引的实体可以指定索引名,然后给各索引指定Directory
@Indexed
public class Status { ... }
@Indexed(index="Rules")
public class Rule { ... }
@Indexed(index="Actions")
public class Action { ... }
设置hibernate.search.default.directory_provider为filesystem,对实体Status会生效
设置hibernate.search.default.indexBase可指定索引目录
设置hibernate.search.Rules.directory_provider为ram指定内存索引方式
设置hibernate.search.Actions.directory_provider为com.acme.hibernate.provider.CustomDirectoryProvider
**** 内建DirectoryProviders列表 ****
-------------------------------------------------------------------------
1) ram 基于内存的directory, 服务一down掉,索引就没了
2) filesystem 基于文件系统的directory
indexBase
indexName (主要用于sharded indexes)
locking_strategy (可选)锁策略
filesystem_access_type 指定文件系统的访问类型,即指定lucene的FSDirectory,可选值为:
1) auto(default) 非windows系统用NIOFSDirectory,windows系统用SimpleFSDirectory
2) simple 采用SimpleFSDirectory
3) nio 采用NIOFSDirectory
4) mmap 采用MMapDirectory
3) filesystem-master 基于文件系统的directory,主要用于JMS后端集群
indexBase
indexName
sourceBase
source
refresh 刷新时间,默认3600秒,推荐高于copy信息的50%时长
buffer_size_on_copy 默认16MB 多数测试报表显示16-64MB为佳.
locking_strategy
filesystem_access_type
4) filesystem-slave 基于文件系统的directory,主要用于JMS后端(属性同上)
5) infinispan 基于Infinispan数据网格平台的directory(主要用于分布式系统)
-------------------------------------------------------------------------
4.Sharding indexes
一般不推荐使用。可以考虑使用的场景:
>> 单一的index太大,更新index的时间导致整个应该逐渐变慢
>> 常规搜索只需搜索索引子集,例如数据根据用户、地区、应用存在天然分隔
5.Sharing indexes
用一个Lucene index存储多个实体信息,可用如下方式实现:
>> 配置hibernate.search.[entity name全名].indexName为同一值
>> 实体的@Indexed注解中,指定相同的index属性名,即@Indexed(index="xxxx")中xxxx相同
目前为止这样设置并没什么额外的好处
6.Worker configuration
用于完善Hibernate Search与Lucene的相互工作。
1) Worker 该接口的实现必须完成:
1.接收实体的所有变化
2.根据上下文(通常为一个事务)排列这些变化
3.上下文结束时应用所有的变化
接口定义:
public interface Worker {
void performWork(Work<?> work, TransactionContext transactionContext);
void initialize(Properties props, WorkerBuildContext context);
void close();
void flushWorks(TransactionContext transactionContext);
}
**** Scope 配置览表 ****
-------------------------------------------------------------------------
1) hibernate.search.worker.scope
指定采用的Worker实现的类名全称。
该属性未设、设为空或transaction时,均采用默认的TransactionalWorker.
2) hibernate.search.worker.*
所有以hibernate.search.worker为前缀的属性都会以参数传入Worker的初始化中。
3) hibernate.search.worker.batch_size
指定每个上下文中最大索引数量,超过该数量时即使当前上下文未结束,也会触发索引事件
该属性仅当Worker的实现委派atchedQueueingProcessor时才起作用。
-------------------------------------------------------------------------
2) 准备并应用索引的变化
1.同步更新:始终保持与数据库同步。
2.异步更新:可以最小化用户响应时间。存在数据不一致的潜在风险。
**** Execution 配置览表 ****
-------------------------------------------------------------------------
1) hibernate.search.worker.execution 索引更新的执行方式,可选值:
1) sync 同步(default)
2) async 异步
2) hibernate.search.worker.thread_pool.size 异步执行时池内的线程数,默认1
3) hibernate.search.worker.buffer_queue.max (仅当异步时有效)定义最大工作队列,默认无穷大
-------------------------------------------------------------------------
3) 多VM的情况
通过配置back end实现不同的架构方式
**** Backend 配置览表 ****
-------------------------------------------------------------------------
hibernate.search.worker.backend 可选值:
1) lucene (default)
2) jms
3) jgroupsMaster 或 jgroupsSlave
4) blackhole 主要用于测试/开发
5) 自定义
-------------------------------------------------------------------------
7.JMS Master/Slave configuration
8.JGroups Master/Slave configuration
9.Infinispan Directory configuration
10.Reader strategy configuration
配置读策略。通过设置hibernate.search.reader.strategy实现,有三种方式
1) shared(default) 多查询共享Reader,该方式通常更有效
2) not-shared 为每一个查询创建一个Reader
3) custom 自定义,指定一个实现的类全名
11.Tuning Lucene indexing performance
调整Lucene索引方式的配置。
hibernate.search.[default|<indexname>].indexwriter.transaction.<parameter_name>
hibernate.search.[default|<indexname>].indexwriter.batch.<parameter_name>
12.LockFactory configuration
配置锁策略。一般不需要。
hibernate.search.<index>.locking_strategy
1) simple
2) native
3) single
4) none
13.Exception Handling Configuration
配置异常捕获方式。默认hibernate.search.error_handler为log(可以不用明确配置)
自定义时,需实现ErrorHandler接口并提供handle(ErrorContext context)方法。
ErrorContext接口如下:
public interface ErrorContext {
List<LuceneWork> getFailingOperations();
LuceneWork getOperationAtFault();
Throwable getThrowable();
boolean hasErrors();
}
设置hibernate.search.error_handler为<CustomerErrorHandler>
14.Analysis
默认hibernate.search.analyzer为org.apache.lucene.analysis.standard.StandardAnalyzer