Hibernate Search 项目的 Beta 第二版刚刚发布。InfoQ 为此采访了Hibernate Search 项目的发起人 Emmanuel Bernard 以了解更多细节,Emmanuel 同时也是相关项目 Hibernate Annotations 和 Hibernate EntityManager 的发起人。根据 Emmanuel 所言,Hibernate Search 目的是帮助 Hibernate 的使用者或是 Java Persistence API (JPA)的使用者可以通过全文搜索索引来访问 Hibernate 或 JPA 管理的对象。Hibernate Search 项目的主要特性包含以下几个方面:
- Lucene 集成——作为强大高效的检索引擎, Lucene 的美名早已久经考验了;
- 数据的自动插入和更新——当一个对象通过 Hibernate 添加或更新时,索引也会相应进行透明的更新;
- 支持众多复杂的搜索方式——可快速的使用通配符进行搜索,以及多关键词全文检索(multi-word text searches)和近似或同义词搜索(approximation/synonym searches),或根据相关性排列搜索结果;
- 搜索集群(Search Clustering)——Hibernate Search 提供了内建搜索集群解决方案,其中包括一个基于 JMS 的异步查询和索引系统;
- 对 Lucene API 接口的直接调用——如果用户打算处理某些特别复杂的问题,可以在查询中直接使用 Lucene 提供的 API 接口;
- 对 Lucene 的自动管理——Hibernate Search 可以管理并优化 Lucene 的索引,并且非常高效地使用 Lucene 的 API 接口。
项目的主要目标包含以下几个方面:
- 易用性——和 Hibernate 的 ORM 映射一样,Hibernate Search 帮助用户实现了业务 90% 的工作,并且使用户专注于余下更为困难的业务实现部分;
- 和已有的 Hibernate/JPA 编程模型保持一致性——更轻松地集成 Hibernate/JPA 编程模型是“一开始就致力要实现的目标”。
Emmanuel 在实践中给出了几个具体的实例,包括:
- 通过转换对象构造的方式,HQL 查询语句可以被转换为搜索查询,“通常只是几行代码”——其他的因素(执行查询,结果格式等)都保持不变;
- 不需要启动过程,因为 Hibernate Search 透明地利用了已有的 Hibernate/JPA 基础架构;
- 最小配置集合要求至少在
persistence.xml
或者hibernate.cfg.xml
中设置两个属性。
关于最终发布时间表,Emmanuel 指出 3.0 版本发布之前将在查询和索引最优化方面做出大量的工作,他就此总结道:
Hibernate Search 的核心代码实际上是相当稳定的,发布版之所以仍标记为 Beta 的原因是我们对拓展 API 接口还没有充足的把握,Hibernate Search 内核相当灵活,并且可以融入用户自定制的搜索策略。到目前为止,代码已经相对稳定,我们希望看到一个具备完善特性的产品,并保证 API 接口不会出现问题。 如同平常一样,开源项目在编码完成时发布,我所要说的就是这个夏天很长并且我没有安排什么额外的度假计划 :)
关于 Hibernate Search 实现策略好处和不足的有趣争论也随之展开, Sanjiv Jivan 就此描述了他眼中的Hibernate Search 优缺点,随后Emmanuel Bernard 也回应了Sanjiv 的看法。那么,亲爱的读者,对于Hibernate Search,您的观点又是如何呢?
查看英文原文: Hibernate Search: Indexed Full Text Search of your Domain Model
评论