【问题标题】:Full-Text-Search of database [closed]数据库的全文搜索[关闭]
【发布时间】:2020-04-26 02:43:03
【问题描述】:

我正在寻找一种高效且可读的方式来实现全文搜索。我对搜索有很多要求。请参阅下面的列表。

要求

  • 性能
    我的数据库增长得非常快。将所有数据加载到 HEAP 中并做一些.stream()-magic 不是一种选择。搜索应由 DBMS 执行。
  • 可读性
    我需要一个简单的解决方案。像How to implement simple full text search in JPA (Spring Data JPA)? 这样的复杂查询(参见选项#2)也不是解决方案。我需要一些JOINs,结果查询很复杂。
    “索引字段”的开销也是不可能的(对于很多连接的数据)。
  • 并发
    应用程序需要可扩展(使用 n 个实例),因此使用 Lucene 的解决方案不是很好 here is an example
  • 没有混合技术
    我不想将逻辑混合到不同的系统中。这意味着,整个搜索逻辑应该在 Java 中定义。应避免将 Java 逻辑与视图或 sql 函数结合使用。

尚未发现选项

  1. QueryDsl
    这是我的旧解决方案。但它非常复杂,并且对自动生成的类产生了很多问题。
  2. Lucence
    我喜欢这个。但是只有一个大问题:索引。在所有实例上保持索引更新有点过分了。
  3. Very long @Query
    生成的查询变得难以处理。
  4. Java.stream()...
    // kinda
    getAllUsers().stream()
      .filter(user -> user.getName().contains(searchTerm)
        || user.getSex().contains(searchTerm) 
        || user.getAge().toString().equals(searchTerm) 
        || ...)
    
    我需要很多数据才能做到这一点。所以这个解决方案也不能很好地扩展。
  5. Specification Interface
    我的首选解决方案。但也许还有其他(更好的)解决方案?
  6. SearchFiled 或类似 太多JOINS。数据太多。
  7. ?

问题

您对 Spring-Boot-Application 中的全文搜索有何经验?您知道满足我要求的解决方案吗?

【问题讨论】:

    标签: java sql spring hibernate jpa


    【解决方案1】:

    如果你已经到了 Lucene,那么更进一步的是 Solr。我没有使用您上面提到的选项,但我确实使用过 Solr,并且可以肯定地说值得一试,因为它的速度和易用性。

    在你提出的四个约束中,前三个已经得到照顾,我觉得 Solr。

    • 性能:Solr 是该领域公认的候选者。
    • 可读性:我假设您的意思是代码的可读性。虽然这取决于代码和设计是否完成,但由于缺少 JOIN 和其他 RDBMS 概念,Solr 部分对编码、理解和维护非常友好。
    • 并发:来自lucene.apache.org/solr的官方文档:

    Lucene 和 Solr 都旨在通过最少的自定义编码支持大型实现。

    Solr 在这方面可以做到以下几点:

    • 在多个服务器上分布索引
    • 复制多台服务器上的索引
    • 合并索引
    • 禁止混合使用技术:选择使用 Solr,您至少拥有两种技术:Java 和 Solr。我不确定您是否希望将解决方案保留为纯 Java/JEE。如果是这种情况,那么这可能无法满足这种需求。

    但是,这个要求:

    搜索应由 DBMS 执行。

    肯定没有得到照顾。

    另外,想不出除了自定义设计之外的其他方法:

    在所有实例上保持索引更新有点过分。

    警告:如果您是 Solr 新手,可能需要一些时间才能很好地掌握它。

    【讨论】:

      【解决方案2】:

      您可以考虑使用 apache solr 进行搜索

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-30
        • 2013-07-21
        • 2011-04-01
        • 2010-11-06
        • 1970-01-01
        • 1970-01-01
        • 2021-10-29
        相关资源
        最近更新 更多