Hibernate Search 之 进度Monitor

http://simonlei.iteye.com/blog/577068 这篇文章中,我找到了一个简单的办法来对

索引进行reindex。不过,现在又有个需求,我希望能够对 reindex的过程做一个进度条。

 

看了一下文档,fullTextSession.createIndexer() 得到的实际上是 MassIndexerImpl,使用这个类

的 startAndWait 方法来进行reindex,就是阻塞的,使用 start 就是异步的。而且,更美好的是,

MassIndexerImpl 类里面使用了一个 MassIndexerProgressMonitor,它使用了一个

SimpleIndexingProgressMonitor 的简单实现来进行log。

 

美中不足的是,这个 monitor 是一个私有field,而且不提供setter。这个就很痛苦了,不过也不难,

用reflect把它绕过去,然后自己做一个Monitor就OK了。

 

好了,上代码:

            FullTextSession fullTextSession = Search.getFullTextSession( getSession());            
            DocumentIndexProgressMonitor monitor = new DocumentIndexProgressMonitor();
            MassIndexer indexer = fullTextSession.createIndexer();
            ReflectUtils.setFieldValue( MassIndexerImpl.class, "monitor", indexer, monitor);
            indexer.start();

 

setFieldValue 做什么了?看代码:

    public static void setFieldValue( Class clz, String fieldName, Object obj, Object fieldValue) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
        Field field = clz.getDeclaredField( fieldName);
        field.setAccessible( true);
        field.set( obj, fieldValue);
    }

 

至于monitor的实现就简单了,不上代码了,自己参考hibernate search当中的源代码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值