Hibernate Search 3.0.0.Beta2推出了许多新的有趣功能
- 共享Lucene IndexReader,显著提高了性能,尤其是在读取为主的应用程序中
- 自定义对象图抓取策略的能力
- 从Lucene索引中投影属性
- 排序查询的能力(感谢Hardy Ferentschik)
- 暴露无论分页与否的匹配结果总数
- 以及其他惊喜和错误修复,更多信息请查看发行说明
性能
Hibernate Search现在可以共享IndexReader在查询和线程之间,这使得它们更加高效,尤其是在读取次数远多于更新次数的应用程序中。与单个查询相比,打开和预热LuceneIndexReader可能是一个相对昂贵的操作。要启用共享,只需添加以下属性
hibernate.search.reader.strategy shared
对象加载也得到了增强。例如,您可以定义用于加载预期对象图的精确抓取策略,就像您在Criteria或HQL查询中做的那样,从而允许针对特定用例进行优化。
某些用例不需要完全加载的对象。Hibernate Search现在允许从Lucene索引中投影属性。以在索引中存储值的代价,您现在可以检索特定属性子集。行为类似于HQL或Criteria查询投影。
fullTextQuery.setIndexProjection( "id", "summary", "body", "mainAuthor.name" ).list();
查询灵活性
我已经谈到了可自定义的抓取策略和投影。
Hibernate Search查询的默认排序是按相关性排序,但现在您可以自定义此策略并按字段排序。
无论分页过程如何,了解匹配元素的总数都很有趣。虽然在纯SQL中这很昂贵,但Apache Lucene提供了此信息。getResultSize()现在通过FullTextQuery暴露。从这个信息中,您可以例如
- 实现搜索引擎功能“1-10约888,000,000”
- 实现快速分页导航
- 实现一个多步骤搜索引擎(如果受限制的查询(或查询)没有返回或返回不足的结果,则逐渐启用近似值)
更多信息,请查看发行说明和下载包。Hibernate Search 3.0.0.Beta2与Hibernate Core 3.2.x(从3.2.2)、Hibernate Annotations 3.3.x和Hibernate EntityManaher 3.3.x兼容。