Solr vs HibernateSpatial vs HibernateSearch

时间:2014-10-04 07:50:33

标签: hibernate solr hibernate-search spatial-index

在我的网页应用程序中(使用Spring / Hibernate v4 + JPA v2.1 + PostgreSql 9.3构建),我必须提供以下功能:

  1. 从具有少量10000行
  2. 的多个数据库表中进行文本搜索
  3. 从文件中搜索文字 - doc,xls,pdf,htm(少数10000' s)
  4. 空间搜索/索引:从点
  5. 中查找半径为x KM的实体

    我发现有多种选择,但无法权衡利弊:

    • Spring Data Solr - 可能适用于所有上述3但不是实时索引
    • Hibernate Search - 仅使用Lucene但不确定是否支持2,因为在document中找不到任何内容,但是1& 3件作品。但是,索引会自动更新。
    • Hibernate Spatial - 不知道Hibernate Search中的空间支持是否与此相同
    • Solr & Hibernate Search combined享受两者提供的最佳功能但无法在此路径中找到更多信息

    哪个选项可用于支持我的所有要求?如果有人可以指出每个人的利弊,那将对决策有很大的帮助。

    由于数据会在我的应用中频繁添加,因此实时索引将是一个很大的优势。

1 个答案:

答案 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服务器,以便您最终可以选择如何设置架构,而无需更改域和应用程序逻辑的建模方式。