首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >全文检索数据库

全文检索数据库
EN

Stack Overflow用户
提问于 2020-01-08 14:27:24
回答 2查看 308关注 0票数 1

我正在寻找一种表演的方式和可读的方式来实现全文搜索。我对说教有很多要求。见下面的列表。

要求

  • 性能 我的数据库发展得很快。将所有数据加载到堆中,做一些.stream()-magic并不是一种选择。搜索应该由DBMS执行。
  • 可读性 我需要一个简单的解决方案。像这个如何在JPA (Spring )中实现简单的全文搜索?这样的复杂查询(参见选项2)也不是一个解决方案。我需要一些JOIN,结果的查询非常复杂。 使用“索引字段”的开销也是不可能的(对于大量连接的数据)。
  • 并发 应用程序需要具有可伸缩性(有n个实例),因此使用Lucene的解决方案不是很好的下面是一个例子
  • 没有混合技术 我不想把逻辑混入不同的系统。这意味着,整个搜索逻辑应该用Java来定义.应该避免Java逻辑与视图或sql函数的结合。

发现的选项

  1. QueryDsl 这是我以前的解决办法。但是它非常复杂,并产生了许多问题的自动生成的类。
  2. 朗肯斯 我喜欢这个。但只有一个大问题:指数。将索引up2date保留在所有实例上有点太过分了。
  3. 超长@查询 结果的查询变得复杂来处理它。
  4. Java.stream()... // user().stream().filter(用户-> user.getName().contains(searchTerm) \x{e76f}\x{e76f}(.contains(SearchTerm)\x{e76f}\x{e76f}(user.getAge().toString() 我需要很多数据才能做到这一点。因此,这一解决方案也不会很好地推广。
  5. 规范接口 我更喜欢的解决方案。但也许还有其他(更好的)解决方案?
  6. SearchFiled或类似的太多JOINS。数据太多了。

问题

您在Spring应用程序中使用全文搜索的经验是什么?你知道满足我要求的解决方案吗?

EN

回答 2

Stack Overflow用户

发布于 2020-01-08 14:58:15

如果你已经到达卢塞尼,那么还有一步就是索尔。我没有使用您前面提到的选项,但我肯定使用了Solr,可以肯定地说,它值得一试,速度快,使用方便。

在你提出的四个约束中,前三个都被处理好了,我和Solr在一起。

  • Performance:Solr是这方面的一个被证明的候选人。
  • readability :我想您的意思是代码的可读性。尽管这取决于代码和设计的完成,但由于缺乏JOIN和其他关系数据库管理系统的概念,Solr部分对代码、理解和维护非常友好。
  • Concurrency:来自lucene.apache.org/solr的正式文档

Lucene和Solr都被设计成支持使用最小定制编码的大型实现。

在这方面,Solr可以做以下工作:

  • 跨多个服务器的索引distributing
  • 在多台服务器上复制索引
  • 合并索引
  • 没有混合技术--:通过选择使用Solr,您至少有两种技术: Java和Solr。我不确定您是否希望将您的解决方案保留为纯Java/JEE。如果是这样的话,这可能不能满足这一需要。

然而,这一要求:

搜索应该由DBMS执行。

肯定没有照顾到

此外,除了自定义设计之外,还不能想到一种用于此的方式:

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

A警告:--如果您对Solr还不熟悉的话,可能需要一些时间才能很好地掌握Solr。

票数 1
EN

Stack Overflow用户

发布于 2020-01-08 14:45:31

您可以考虑apache solr进行搜索。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59647956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档