Hibernate Search是一个库,它通过自动索引实体,将Hibernate ORM与Apache Lucene或Elasticsearch集成,从而实现高级搜索功能:全文、地理空间、聚合等。更多信息,请参阅hibernate.org上的Hibernate Search。

圣诞老人提前到来,带来了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 仓库下载发行版上查看新版本。您还可以阅读文档

感谢各位贡献者,特别是来自SourcesenseGustavo。欢迎Sanne加入团队(对于这个粗略的发布洗礼表示歉意 :))。

祝您搜索愉快!


回到顶部