在我的网页应用程序中(使用Spring / Hibernate v4 + JPA v2.1 + PostgreSql 9.3构建),我必须提供以下功能:
我发现有多种选择,但无法权衡利弊:
哪个选项可用于支持我的所有要求?如果有人可以指出每个人的利弊,那将对决策有很大的帮助。
由于数据会在我的应用中频繁添加,因此实时索引将是一个很大的优势。
答案 0 :(得分:3)
免责声明:我是Hibernate Search的开发人员之一,但我们依赖它并喜欢它,也为Lucene和Solr做出贡献
Hibernate Search包含与Solr相同的技术,主要区别在于Hibernate Search会将其嵌入到您的应用程序中,而Solr通常作为独立服务运行。
像Solr这样的独立服务的好处是,您可以将其用作其他非Java服务的集成点,缺点是您必须管理和维护新服务。 Solr还需要与您的应用程序集成,而Hibernate Search的作用是集成它(并嵌入Apache Lucene,Solr构建的技术)并通过自动监听Hibernate事件来应用更改。
它能够完全满足所有三个要求,包括半径滤波和实时索引;文档索引需要通过integration with Apache Tika进行。
当您拥有比简单距离/半径标准更复杂的几何时,通常应用Hibernate Spatial,并且当前未与全文索引集成,因此我建议使用Hibernate Search的{{3}}功能(这与Hibernate Spatial无关。
Hibernate Search的主要缺点是显而易见的:它要求您的应用程序使用Hibernate,因为它的主要功能是侦听更新事务生成的更新事件。它提供与Solr相同的底层技术,因此除了嵌入式技术与单独的基于REST的服务器之间的重大架构差异之外,没有太多关于“更好”的争论。每个都有好处和缺点,但这很大程度上取决于您的架构的其他因素,而不是提供的简单功能。我们计划在未来版本中支持将事件发送到独立运行的Solr服务器,以便您最终可以选择如何设置架构,而无需更改域和应用程序逻辑的建模方式。