自 Hibernate Search 的最新发布以来已经有一段时间了,但由于代码库相当稳定且无错误,我们一直保持到现在。但现在有一些有趣的功能已经不能再等待了
- 所有集合更改的透明重新索引
- 支持 Lucene 2.3(性能改进和稳定性)
- 查询结果转换器使投影更加友好
集合更改的透明重新索引
终于!这个功能已经让一些人困扰了一段时间。如果您使用 Hibernate 3.2.6,Hibernate Search 将在集合更改时重新索引实体。请确保添加适当的附加事件监听器
<event type="post-collection-recreate"/> <listener class="org.hibernate.search.event.FullTextIndexCollectionEventListener"/> </event> <event type="post-collection-remove"/> <listener class="org.hibernate.search.event.FullTextIndexCollectionEventListener"/> </event> <event type="post-collection-update"/> <listener class="org.hibernate.search.event.FullTextIndexCollectionEventListener"/> </event>
当 Hibernate Annotations 3.3.1 发布时(代码已经检查入),此事件监听器配置将透明执行。
Lucene 2.3
Hibernate Search 现在运行 Lucene 2.3。Hibernate Search 与 Lucene 2.2 完全向后兼容,但我们强烈建议您迁移到 Lucene 2.3(包含在最新的 Hibernate Search 分发中),因为 Lucene 团队已经进行了一些有趣的功能改进(我知道,他们又做到了)。
查询结果转换器s
投影查询在某些性能关键情况下是一个有用的工具,但返回的结果是List<Object[]>:不用说,对开发人员来说不是非常友好。
结果转换器,已用于常规 Hibernate Core 查询以处理结果,现在也可以用于 Hibernate Search 查询。
FullTextQuery query = s.createFullTextQuery( query, Employee.class ); query.setProjection("id", "lastname", "department"); query.setResultTransformer( new AliasToBeanResultTransformer(EmployeeView.class) ); List<EmployeeView> results = (List<EmployeeView>) query.list();
以及其他一些错误修复
引入了一些额外的错误修复和增强功能,包括@IndexedEmbedded在多个级别使用,Hibernate Search 过滤器缓存现在实际上使用标准的 LuceneCachingWrapperFilter等等。
祝您使用愉快