Spring 启动基于微服务的应用程序中的全文搜索功能

Full-text Search functionality in Spring Boot microservices based application

我们有一个基于微服务的应用程序,它是在 Spring Boot 中开发的。假设有 3 个微服务 A、B 和 C。前端使用 Angular 编写,后端包括 MySQL 数据库和用于 ORM 的 Hibernate。我们需要实现一个全文搜索功能,该功能将在 UI 上有一个搜索框,用户可以在其中输入他选择的文本。搜索必须能够 return 来自所有 3 个微服务的数据库中的数据。我在最终确定相同的搜索技术时遇到困难。我掌握的一些技术是

  1. 休眠搜索
  2. A​​pache Solr
  3. 弹性搜索

解决这个问题最好的技术是什么?如果可能的话,有没有相同的例子?

Hibernate search looks to be depending on internal search solution for it to be providing full text search which could be either plain Apache Lucene or Elasticsearch. I'm not sure but its Elasticsearch integration if its already matured as version 6.0 仍处于开发阶段。

Hibernate search i.e. 5.11的older/stable版本支持Elasticsearch 2.0到5.6。

但是查看您的查询,这取决于您的使用情况。也许以下几点会对您有所帮助。

  • 您拥有的数据有多大,您的 documents/data 的预期增长率是多少。
  • 您对该应用程序的写入率和读取率是多少?
  • 您有哪些类型的搜索用例?您在寻找什么搜索功能?例如自动完成、自动建议、突出显示、分面搜索
  • 您是在寻找分布式搜索还是在使用硬件方面有限制?
  • 是否要求支持多语言搜索?
  • 是否只有文本搜索就足够了,还是您将来还会对搜索日志或点击查看数据进行分析?
  • 在将文档引入搜索引擎时,您有哪些选择。如果是 Elasticsearch,您可以轻松使用 Beats 或 Logstash。或者你可以简单地把原始数据转储到 ES 中,然后利用 Ingest API 的组合做 pre-processing/enrichment/filtering 然后再次将处理后的数据推送到 Elasticsearch 中的不同索引中。

Solr 和 Elasticsearch 都是很棒的技术,但如果您必须使用其中之一,我强烈建议您使用 Elasticsearch,因为它会在上述所有查询中为您提供帮助,而且分布式模型更强大, 它拥有自己令人惊叹的 DSL,非常成熟且易于使用,具有出色的数据管理 tools/API,它非常快速且易于设置。更不用说他们的聚合查询可以帮助您获取有关您已摄取的文档的分析信息。

您还可以通过 Kibana 设置自己的仪表板,这将帮助您快速创建一些出色的可视化工具。

另外一点是它完全 RESTful 本质上,这意味着它可以让您的应用程序部署更轻松。我建议您从 here 开始,花一些时间了解这项技术。

希望对您有所帮助!

对于全文搜索,Elasticsearch 和 Apache Solr 是给定选择中的最佳选择。

但是,我强烈反对 Elasticsearch 比 Solr 或其他方式更好的说法,但我不了解有关您的业务案例的更多信息。这两种技术对于给定的问题表现相同,因为它们都建立在 Apache Lucene 搜索引擎之上。

他们都提供了很棒的 REST 客户端。

Here 您可以在 Java 的同一项目中查看 Apache Solr 和 Elasticsearch 的示例实现。你也可以看看有什么不同,你更喜欢哪一个。

此外,还有六篇关于如何使用 Apache Solr 和 Elasticsearch 的文章 here。最后一章是关于研究表明这两个引擎几乎相同并且仅在非常特定的业务案例中有所不同。两者都有很多支持工具。