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

Hibernate 团队很高兴地宣布推出 Hibernate Search 3.4,它带来了几项新功能,最值得注意的是分面功能:我们继续了 3.3 版本的趋势,当时重点是简化查询)。但大部分工作都集中在性能优化上,您应该会看到在您的应用程序中,尤其是在领域模型变得复杂时,带来的好处。

哦,对于不知道的人来说,Hibernate Search 是在 Hibernate Core(以及 Infinispan)之上运行的全文搜索引擎。

分面

分面是一种将查询结果划分到多个类别的技术。比如说你搜索一辆车,类别可以是

  • 品牌(雷诺、奔驰、尼桑、福特)
  • 价格范围(低于5000美元、5000-10000美元、10000-20000美元,……)

对于每个类别值,分面功能都会给出匹配元素的数目。这样你就会知道有20辆奔驰和7辆尼桑符合查询。一方面,你看到的是查询结果(通常在页面中央),另一方面(通常在左侧),你看到的是类别及其在查询结果中的分布列表。分面实际上是一个非常智能和情境化的导航工具。

最后,您可以钻取,即选择一个或多个分类结果来细化查询。很难用言语解释这一切,但请查看amazon.com(在部门内进行查询 - 比如在数码单反部门 - 查询“镜头”,您将看到左侧的部门、品牌、客户评论、条件筛选器)。

Hibernate Search 现在提供了一种 API 来实现查询的 Amazon 风格筛选。我们使用 DSL API 来表达一个筛选请求,然后将其附加到查询上。

FacetingRequest priceFacetingRequest = qB
  .facet()
    .name( "priceFaceting" )
    .onField( "price" )
    .range()
      .below( 1000 )
      .from( 1001 ).to( 1500 )
      .above( 1500 ).excludeLimit()
    .createFacetingRequest();

请查看文档以获取更多信息。

首先从二级缓存检索实体

有些人有足够小的数据集,可以将大部分活动数据保存在他们的二级缓存中。到目前为止,Hibernate Search 优先考虑数据库查询。现在您可以自定义数据检索方式,尤其是强制使用二级缓存。

FullTextQuery query = session.createFullTextQuery(luceneQuery, User.class);
query.initializeObjectsWith(
    ObjectLookupMethod.SECOND_LEVEL_CACHE,
    DatabaseRetrievalMethod.QUERY
);
List results = query.getResultList();

非常感谢提出此功能的客户,它在各种情况下都非常有用 :)

Lucene 3.1

Hibernate Search 已升级到 Lucene 的最新版本。虽然 Lucene 区域的一些 API 已更改,但 Hibernate Search 为所有破坏性更改提供了保护。但是请确保检查我们的迁移指南,因为一些 Lucene 配置已更改。

性能改进

在这个版本中投入了大量工作来改进性能。当然,Lucene 3.1 带来了很多增强功能,但我们还改进了 Hibernate Search 引擎。

  • 仅在索引属性更改时更新实体:如果实体在 Hibernate Core 中更改,但没有任何索引属性更改,我们将不再触发索引。
  • 批量索引器现在在文本分析阶段使用多个线程:批量索引尽可能并行运行工作,我们将实际的文本分析阶段添加到其中。
  • 可使用FieldCache以换取性能改进:在内存中加载给定字段的值,并避免后续在 Lucene 索引中查找。请查看参考文档以获取更多信息。
  • 在集合更新事件上进行更智能的索引:当我们知道某个集合不会涉及更新索引实体(递归)时,我们将跳过该事件。

内部和 Infinispan

我们已经将 Hibernate Search 查询引擎与 Hibernate Core 正确隔离。现在该引擎作为 Infinispan 5 的查询模块的一部分被重用。好消息是,Infinispan 查询从所有新的 Hibernate Search 功能中受益,包括筛选。

如何尝试

还有许多其他小功能以及许多错误修复,请确保查看我们的变更日志以获取所有详细信息。

Hibernate Search 3.4 与 Hibernate Core 的最新版本(3.6.x)兼容。请查看 JBoss.org 的 Maven 存储库下载发行版上的新版本。您还可以阅读文档。如果您将应用程序从以前的 Hibernate Search 版本迁移过来,请确保查看迁移指南

JUDCon 和 JBoss World

如果您对 JBoss 感兴趣,您必须来JBoss World(2011年5月3日至6日在美国马萨诸塞州波士顿)。Sanne 和我将在 Hibernate OGM 和如何使用 JPA 将数据存储在 Infinispan 上进行演讲。更多信息稍后公布(提示,我们使用 Hibernate Search :))。

如果您负担不起JBoss World(即使您能负担),请尽量参加JUDCon,这是JBoss.org社区会议(2011年5月2日至3日在美国马萨诸塞州波士顿举行)。Sanne将讨论Infinispan上的搜索(提示:他将使用Hibernate Search)。更多信息及注册请点击这里


返回顶部