关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。
想改进这个问题?将问题更新为 on-topic对于堆栈溢出。
2年前关闭。
Improve this question
我正在寻找一种高效且可读的方式来实现全文搜索。我对搜索有很多要求。请参阅下面的此列表。
要求
我的数据库增长得非常快。将所有数据加载到 HEAP 中并做一些
.stream()
-magic 不是一个选项。搜索应由 DBMS 执行。 我需要一个简单的解决方案。像这样的复杂查询 How to implement simple full text search in JPA (Spring Data JPA)? (参见选项#2)也不是解决方案。我需要一些
JOIN
s 并且生成的查询很复杂。“索引字段”的开销也是不可能的(对于很多连接数据)。
应用程序需要可扩展(使用 n 个实例),所以使用
Lucene
的解决方案不是很好here is an example 我不想将逻辑混合到不同的系统中。这意味着,整个搜索逻辑应该在 Java 中定义。应避免将 Java 逻辑与 View 或 sql 函数结合使用。
尚未发现的选项
这是我的旧解决方案。但它非常复杂,自动生成的类产生了很多问题。
我喜欢这个。但是只有一个大问题:索引。在所有实例上保持索引更新有点过分了。
产生的查询变得复杂以处理它。
Java.stream()...
// kinda
getAllUsers().stream()
.filter(user -> user.getName().contains(searchTerm)
|| user.getSex().contains(searchTerm)
|| user.getAge().toString().equals(searchTerm)
|| ...)
我需要很多数据才能做到这一点。所以这个解决方案也不能很好地扩展。
我的首选解决方案。但也许还有其他(更好的)解决方案?
SearchFiled
或类似的太多
JOINS
.数据太多。 问题
您对 Spring-Boot-Application 中的全文搜索有何经验?您知道满足我要求的解决方案吗?
最佳答案
如果你已经到了 Lucene,那么更进一步的是 Solr。我没有使用您上面提到的选项,但我确实使用过 Solr,并且可以肯定地说它值得一试,因为它的速度和易用性。
在你提出的四个约束中,前三个已经得到照顾,我觉得 Solr。
JOIN
,Solr 部分对代码、理解和维护非常友好。和其他 RDBMS 概念。 Both Lucene and Solr were designed to scale to support large implementations with minimal custom coding.
并且 Solr 在这方面可以做到以下几点:
- distributing an index across multiple servers
- replicating an index on multiple servers
- merging indexes
但是,这个要求:
The search should be performed by the DBMS.
是 肯定没有照顾。
还有,想不出办法除了定制设计为了这:
Keep the index up2date on all instances is a bit overkill.
警告:如果您不熟悉 Solr,可能需要一些时间才能很好地掌握它。
关于java - 数据库全文检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59647956/