Solr vs Hibernate空间vs HibernateSearch

Solr vs Hibernate空间vs HibernateSearch,hibernate,solr,hibernate-search,spatial-index,Hibernate,Solr,Hibernate Search,Spatial Index,在我的web应用程序(使用Spring/Hibernate v4+JPA v2.1+PostgreSql 9.3构建)中,我必须提供以下功能: 从多个数据库表中进行文本搜索,这些表的行数只有10000行 从文件中进行文本搜索-doc、xls、pdf、htm(仅10000个) 空间搜索/索引:查找距离点x KM半径内的实体 我发现有多种选择,但无法权衡利弊: Spring数据解决方案-可用于上述所有3种,但不可用于实时索引 Hibernate搜索-仅使用Lucene,但不确定2是否受支持,因为在

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

  • 从多个数据库表中进行文本搜索,这些表的行数只有10000行
  • 从文件中进行文本搜索-doc、xls、pdf、htm(仅10000个)
  • 空间搜索/索引:查找距离点x KM半径内的实体
  • 我发现有多种选择,但无法权衡利弊:

    • Spring数据解决方案-可用于上述所有3种,但不可用于实时索引
    • Hibernate搜索-仅使用Lucene,但不确定2是否受支持,因为在its中找不到关于它的任何内容,但1和3可以工作。不过,索引会自动更新
    • Hibernate Spatial-不知道Hibernate搜索中的空间支持是否与此相同
    • 享受两者提供的最佳功能,但无法在此路径上找到更多信息
    哪个选项可用于支持我的所有需求?如果有人能指出每种方法的优点/缺点,那将对决策有很大帮助

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

    免责声明:我是Hibernate Search的开发人员之一,但也为Lucene和Solr做出了贡献,因为我们依赖并热爱它

    Hibernate Search包含与Solr相同的技术,主要区别在于Hibernate Search将其嵌入到应用程序中,而Solr通常作为独立服务运行

    像Solr这样的独立服务的好处是,您可以将其用作其他非Java服务的集成点,缺点是您必须管理和维护一个新服务。Solr还需要与您的应用程序集成,而Hibernate搜索的作用是集成它(并嵌入ApacheLucene,Solr构建的技术),并通过自动侦听Hibernate事件来应用更改

    它能够完全满足所有三个要求,包括半径过滤和实时索引;需要通过its对文档进行索引

    Hibernate Spatial通常在具有比简单的距离/半径标准更复杂的几何体时应用,并且当前未与全文索引集成,因此我建议使用Hibernate搜索功能(与Hibernate Spatial无关)


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

    没有任何评论,1天后进行上/下投票,我一定问了一个愚蠢的问题:(感谢分享此信息Sanne。如果我可能会问,你能否告诉我Hibernate Search vs Solr的一些限制,作为Hibernate Search开发人员,你知道这些限制。这将有助于其他人更好地比较这两种技术。好的一点,补充道。这是我目前所有查询的完美答案,非常感谢。