【发布时间】: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 函数结合使用。
尚未发现选项
-
QueryDsl
这是我的旧解决方案。但它非常复杂,并且对自动生成的类产生了很多问题。 -
Lucence
我喜欢这个。但是只有一个大问题:索引。在所有实例上保持索引更新有点过分了。 -
Very long @Query
生成的查询变得难以处理。 -
Java.stream()...
我需要很多数据才能做到这一点。所以这个解决方案也不能很好地扩展。// kinda getAllUsers().stream() .filter(user -> user.getName().contains(searchTerm) || user.getSex().contains(searchTerm) || user.getAge().toString().equals(searchTerm) || ...) -
Specification Interface
我的首选解决方案。但也许还有其他(更好的)解决方案? -
SearchFiled或类似 太多JOINS。数据太多。 - ?
问题
您对 Spring-Boot-Application 中的全文搜索有何经验?您知道满足我要求的解决方案吗?
【问题讨论】:
标签: java sql spring hibernate jpa