hibernate search
hibernate search brings the power of full text search engines to the persistence domain model by combining Hibernate Core with the capabilities of the Apache Lucene? search engine.
Full text search engines like Apache Lucene? are very powerful technologies to add efficient free text search capabilities to applications. However, Lucene suffers several mismatches when dealing with object domain models. Amongst other things indexes have to be kept up to date and mismatches between index structure and domain model as well as query mismatches have to be avoided.
hibernate search addresses these shortcomings. It indexes your domain model with the help of a few annotations, takes care of database/index synchronization and brings back regular managed objects from free text queries. Hence, it solves:
?The structural mismatch:
hibernate search takes care of the object/index translation
?The duplication mismatch:
hibernate search manages the index, keeps changes synchronized with your database, and optimizes the index access transparently
?The API mismatch:
hibernate search lets you query the index and retrieve managed objects as any regular Hibernate query would do
Even though
hibernate search is using Apache Lucene? under the hood you can always fallback to the native Lucene APIs if the need arises.
Depending on application needs,
hibernate search works well in non-clustered and clustered mode, provides synchronous and asynchronous index updates, allowing you to make an active choice between response, throughput and index update time.
Last but not least,
hibernate search works perfectly with all traditional Hibernate patterns, especially the conversation pattern used by Seam.
hibernate search的
Hibernate的搜寻,将持久性的领域模型相结合,与Hibernate的核心能力的权力,全文搜索引擎 Lucene的阿帕奇? 搜索引擎。
如Apache Lucene的全文搜索引擎?是非常强大的技术,以高效的自由文本中添加搜索功能的应用程序。 然而,Lucene的受到一些不匹配时域模型与对象打交道。 其他事情当中指标必须不断更新与索引结构和域模型以及查询不匹配不匹配,必须避免。
hibernate search的解决了这些缺点。 它索引你与几个注解帮助域模型,采用了数据库/指数同步护理和定期管理带回从自由文本查询对象。 因此,它解决了:
结构不匹配:Hibernate的检索需要照顾的对象/索引翻译
不匹配的重复:
hibernate search的管理指标,保持与您的数据库同步变化,优化透明的索引访问
该API不匹配:Hibernate的搜索,您可以查询索引和检索管理作为任何常规的Hibernate查询对象将尽
即使是使用
hibernate search的引擎盖下,你可以随时退回到Lucene的API的本机如有需要Apache的Lucene的?。
根据应用的需要,
hibernate search的行之有效的非集群和集群模式,提供同步和异步索引更新,让您作出的反应之间,吞吐量和索引更新时间主动选择。
最后但并非最不重要,
hibernate search的作品完全符合所有传统的休眠模式,尤其是通过对话方式使用 煤层 。
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 详解