hibernate - Solr vs HibernateSpatial vs HibernateSearch

标签 hibernate solr hibernate-search spatial-index

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

  1. 从包含几万行的多个数据库表中进行文本搜索
  2. 从文件中进行文本搜索 - doc、xls、pdf、htm(几万个)
  3. 空间搜索/索引:查找距某点 x KM 半径内的实体

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

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

哪个选项可以用来支持我的所有要求?如果有人能够指出每种方法的优缺点,这将对决策有很大帮助。

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

最佳答案

免责声明:我是 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,并且当前未与全文索引集成,因此我建议使用 Spatial Hibernate Search 的功能(与 Hibernate Spatial 无关)。

Hibernate Search 的主要缺点很明显:它要求您的应用程序使用 Hibernate,因为它的主要功能是监听更新事务生成的更新事件。它提供与 Solr 相同的底层技术,因此除了嵌入式技术与基于单独 REST 的服务器之间的显着架构差异之外,没有太多关于“更好”的争论。每一种都有优点和缺点,但这在很大程度上取决于架构的其他因素,而不是提供的简单功能。我们计划在未来版本中支持将事件发送到独立运行的 Solr 服务器,以便您最终可以选择如何设置架构,而无需更改域和应用程序逻辑的建模方式。

关于hibernate - Solr vs HibernateSpatial vs HibernateSearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26190808/

相关文章:

java - Spring 数据 : Not an managed type: class java. lang.Object

java - 如何在注释中使用元素实现 idbag?

java - Solr 和 postgresql 集成

java - 如何折叠搜索结果中的重复项

hibernate - 使用 Hibernate Search 对结果进行评分

java - Hazelcast Hibernate CacheKey 大小

sorting - Solr 3.6 中的条件排序

grails - Grails和Solr

java - 自定义过滤器不适用于 solr

java - lucene/hibernate 搜索 - 无法按集合中子类中的字段进行搜索