圣诞老人提前到来,带来了Hibernate Search 3.3!这个版本带来了许多新颖且实用的功能,以及大量的性能改进和错误修复。
兼容性
这个版本被调整以与以下软件一起工作:
- JBoss AS 6
- Seam 2.2.1
- Hibernate Core 3.6
查询
可能最大的新功能是新的查询DSL,它提供了一个易于使用、易于阅读的流畅API,用于程序性查询。查询DSL抽象了诸如要使用的正确属性桥接、给定属性的合适分析器等。您在对象级别工作,让Hibernate Search完成到Lucene世界的转换。
这里是一个相当复杂的示例
QueryBuilder mythQB = searchFactory.buildQueryBuilder().forEntity( Myth.class ).get(); //look for popular modern myths that are not urban Date twentiethCentury = ...; Query luceneQuery = mythQB .bool() .must( mythQB.keyword().onField("description_stem").matching("urban").createQuery() ) .not() .must( mythQB .range() .onField("starred") .from(3).excludeLimit() .to(5) .createQuery() ) .must( mythQB .range() .onField("creationDate") .above(twentiethCentury) .createQuery() ) .createQuery();
我们希望这会使复杂的查询更加容易,更少出错。您可以在这里获得更多信息。
当我们在讨论这个话题时,您现在可以限制查询的时间。虽然这是一个对Hibernate Search的提示,并且是一个尽力而为
的方法,但您可以通过两种方式来完成
- 如果查询时间过长,则抛出异常
- 当时间限制达到时,只返回找到的元素(部分结果)
更多信息请在这里查看。
后端
我们对排队算法进行了重新设计,这将使具有复杂对象图和大量更改的人的工作速度大大提高。
现在您可以将索引存储在Infinispan网格系统中(分布式方式),而不是传统的基于文件系统的方法。索引数据存储在网格上,并在机器集群之间共享。这消除了在主节点和从节点之间复制文件的一些复杂性。更多信息请参见此处。
Hibernate Search现在公开了各种统计信息,如平均查询时间、最慢的查询等。这将帮助您根据硬数据调整应用程序。更多信息请参见此处。
索引和Lucene
我们已经迁移到Lucene 3.0。虽然这个新版本的API存在一些向后不兼容性,但Hibernate Search会保护您免受这些影响。您的应用程序将更快,而无需对应用程序进行最小或没有更改。
请注意,为此,我们引入了一个新的工件org.hibernate:hibernate-search-analyzers。当使用Solr分析框架时,此工件是org.apache.solr:solr-core的替代品。迄今为止,类的命名空间没有变化。现有的@AnalyzerDef定义应该仍然有效。
我们还添加了对新的LuceneNumericField的支持。数值字段可以为数值属性提供显著的查询改进。虽然这个特性在Lucene中被标记为实验性,但我们对此非常乐观。
@Field @NumericField Long size;
更多信息请参见此处。
还有更多
这是一些最突出的新特性,不要犹豫,去查找有关主题的之前的博客条目,当然还有更新和整理过的变更日志和参考文档。
在JBoss.org的Maven 仓库或下载发行版上查看新版本。您还可以阅读文档。
感谢各位贡献者,特别是来自Sourcesense的Gustavo。欢迎Sanne加入团队(对于这个粗略的发布洗礼表示歉意 :))。
祝您搜索愉快!