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

Hibernate Search v.4.2.0.CR1 已发布。主要是错误修复和性能改进,但还提供了一种更简单的方式在 JBoss AS 7 或 JBoss EAP 6 中部署。

JBoss 模块

在 JBoss 7 中,你将找到 lib 目录而不是平面目录;每个模块都组织在其自己的目录中,并明确定义了哪些 jar 被导出以及它对其他模块的依赖关系。现在可以将 Hibernate Search 作为 JBoss 模块捆绑,并添加到应用程序服务器的其他模块中。

这使部署更小、更快,能够在多个应用程序之间共享相同的工件。可能依赖于 Hibernate Search 引擎的其他项目也可能依赖于它,例如 InfinispanTorqueBoxModeShapeCapeDwarfCloud-TM、 ...(告诉我们其他哪些!)

如何在您的应用程序中从中受益?如果您正在 JBoss 7.1.x 或 EAP6 上部署,您不需要将所有 Hibernate Search jar 添加到您的 EAR,而是可以从以下位置下载预先打包的模块:

  • Sourceforge
  • Maven: org.hibernate:hibernate-search-modules

解压模块到您的 JBoss AS 目录中,这将为 Hibernate Search、Apache Lucene 和一些有用的 Solr 库创建模块。Hibernate Search 分为两个模块

  • org.hibernate.search.orm:main 对于使用Hibernate Search和Hibernate的用户;这将递归包含Hibernate ORM。
  • org.hibernate.search.engine:main 对于仅依赖于内部索引引擎的其他项目,并且不希望包含Hibernate的其他依赖。

使用Manifest

让您的应用程序声明对Hibernate Search模块的依赖的最简单方法;只需在应用程序的Manifest中添加一个单一属性即可。

Dependencies: org.hibernate.search.orm services

使用jboss-deployment-structure.xml

作为Manifest的替代,可以使用XML文件:添加包含以下内容的 WEB-INF/jboss-deployment-structure.xml

<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="org.hibernate.search.orm" services="export" />
        </dependencies>
    </deployment>
</jboss-deployment-structure>

有关模块的更多详细信息,请参阅 AS7中的类加载

(这只是新的打包方式,不会影响任何库代码:仍然支持使用较老的传统方式组装应用程序)

空间索引改进

在第一轮反馈后,我们更改了一些方法,并希望使其更加容易,但代价是更改了一些类名。

网格到四叉树

我们放弃了“网格”一词,改用“四叉树”,因为它更好地反映了算法的内部结构。这主要是一个内部细节,但如果您使用了任何带有“网格”后缀的类,现在应该能够找到“四叉树”的对应类。

@Longitude 和 @Latitude

这些注释的属性名称已被更改,以便更易于阅读。

性能

我不知道这些是否会影响您,但如果它们恰好解决了您的用例,性能提升可以非常显著,高达两个数量级。

适用于写入为主的场景的近实时性

我总是预期大多数用户会遇到读取为主的用例,因此近实时IndexManager实现受到了这种信念的偏见:它曾经在每次写入应用后提前准备一个IndexReader。现在这是按需准备的,并且只有在必要时才准备,因此具有写活动高峰的应用程序在使用此后端时将 快得多

同时,与之前的版本相比,Lucene 3.6的行为略有不同,因此现在NRT后端会尽力避免除非必要否则不执行删除操作,这也为某些场景提供了显著的性能提升。

这些更改的组合可能使其适合跟踪访客活动,以在索引上执行高效的数据挖掘活动。

MassIndexer

MassIndexer现在可能从JDBC驱动程序的fetch size提示中受益;这主要取决于您的驱动程序实现:一些驱动程序会忽略它,但尝试一下不会有害。在我的MySQL 5.5测试中,它似乎提供了大约3.1%的小幅但一致的索引时间改进。

Apache Lucene版本

Apache Lucene社区发布了版本 3.6.2,因此我们现在针对这个版本。这主要是一个错误修复版本:没有更改API,因此如果您愿意,您可以坚持使用版本 3.63.6.1

感谢

特别感谢Nicolas Helleringer实现新的空间特性和忍受我,感谢Michael Simons仔细审查和修复空间文档以及他对API的反馈,感谢Guillaume Smet和他的团队对MassIndexer的非常勇敢的调试和修复。


返回顶部