Java 数据库全文检索

Java 数据库全文检索,java,sql,spring,hibernate,jpa,Java,Sql,Spring,Hibernate,Jpa,我正在寻找一种高效、可读的方式来实现全文搜索。我对塞拉奇有很多要求。请参见下面的列表 要求 性能 我的数据库发展得很快。通过执行一些.stream(),将所有数据加载到堆中-魔法不是一个选项。搜索应由DBMS执行 可读性 我需要一个简单的解决方案。类似这样的复杂查询(请参见选项2)也不是解决方案。我需要一些JOINs,结果查询太复杂了。 “索引字段”的开销也是不可能的(对于大量连接的数据) 并发性 应用程序需要具有可伸缩性(使用n个实例),因此使用Lucene的解决方案不是很好 无技术混合 我

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

要求
  • 性能
    我的数据库发展得很快。通过执行一些
    .stream()
    ,将所有数据加载到堆中-魔法不是一个选项。搜索应由DBMS执行
  • 可读性
    我需要一个简单的解决方案。类似这样的复杂查询(请参见选项2)也不是解决方案。我需要一些
    JOIN
    s,结果查询太复杂了。
    “索引字段”的开销也是不可能的(对于大量连接的数据)
  • 并发性
    应用程序需要具有可伸缩性(使用n个实例),因此使用
    Lucene
    的解决方案不是很好
  • 无技术混合
    我不想把逻辑混入不同的系统。这意味着,整个搜索逻辑应该用Java定义。应该避免Java逻辑和视图或sql函数的组合
发现选项了吗

  • 这是我的老办法。但是它非常复杂,并且在自动生成的类中产生了很多问题

  • 我喜欢这个。但只有一个大问题:指数。将索引保留在所有实例上有点过火

  • 结果查询变得复杂,无法处理它
  • Java.stream()…
    //有点
    getAllUsers().stream()
    .filter(用户->用户.getName().contains(搜索术语)
    ||user.getSex()包含(searchTerm)
    ||user.getAge().toString().equals(searchTerm)
    || ...)
    
    我需要很多数据才能做到这一点。因此,该解决方案也不能很好地扩展

  • 我的首选解决方案。但也许还有其他(更好的)解决方案
  • searchfield
    或类似文件 太多的
    联接
    。太多的数据
  • ?
  • 问题:
    您在Spring Boot应用程序中进行全文搜索的经验是什么?你知道一个能满足我的要求的解决方案吗?

    < P>你可以考虑Apache SoR来搜索

    < P>如果你已经到达Lucene,那么一步就是SOLR。我没有使用您上面提到的选项,但我确实使用过Solr,可以肯定地说,出于速度和易用性,值得一试

    在你提出的四个限制条件中,前三个得到了解决,我对Solr感到满意

    • 性能:Solr是这一领域经验证的候选者
    • 可读性:我假设您指的是代码的可读性。尽管这取决于代码和设计是否完成,但Solr部分对代码、理解和维护非常友好,因为缺少
      JOIN
      和其他RDBMS概念
    • 并发性:来自以下官方文档:
    Lucene和Solr都被设计成可扩展的,以支持使用最少定制编码的大型实现

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

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

    搜索应由DBMS执行

    肯定没有得到照顾

    此外,除了定制设计之外,我想不出其他方法来解决这个问题:

    将索引保留在所有实例上有点过分

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