Hibernate Search 的一些基础配置

2 篇文章 0 订阅
1 篇文章 0 订阅

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值