如何将 elasticSearch 与数据库和 Spring Boot 集成

Posted

技术标签:

【中文标题】如何将 elasticSearch 与数据库和 Spring Boot 集成【英文标题】:How to integrate elasticSearch with a database and Spring boot 【发布时间】:2018-02-06 17:30:55 【问题描述】:

我正在开发一个项目,我们使用 Spring boot 和 H2 数据库为开发配置文件和 PgSQL 公开一组 API 用于生产。

我们希望通过基于字段的过滤机制来增强我们的资源端点,以便我们可以访问以下内容:localhost:8080/api/users?firstName=Jhon&company.job=developer

我们尝试使用 jpa 规范,但受到一些限制,例如:枚举、嵌套元素……所以我们决定使用 ElasticSearch。

在网上找到的所有文章都首先讨论了我们使用 ElasticSearch 作为存储系统的场景,而不仅仅是可以与数据源集成的索引搜索引擎。如果有人可以指导我实现如何使用 Spring Boot 将 elasticSearch 与数据库链接起来,那就太好了。谢谢

【问题讨论】:

通过将 ElasticSearch 与数据库链接来解释您的意思。 也许 Jhipster 会做这项工作 在 Spring 中保存模型时,为什么不使用保存到 ES 索引? @SimonMartinelli 如果我理解正确的话,使用elasticsearch我们可以索引数据库中的文档或表格,这样我们就可以拥有先进的搜索机制。由于我不想浪费时间在实现嵌套元素的 JPA 规范(表之间连接),我想将我的数据表索引为平面 Json 对象,并使用 QueryDSL(elasticsearch 语法)基于参数进行高级研究我将提供的 URL。 @ryanlutgen 好吧,这样我会在我的数据库数据和 ES 之间实现良好的同步,但我如何设置配置以使它们都工作?我应该按域模型创建两个存储库(一个用于 JPA,一个用于 ES)吗? 【参考方案1】:

仅仅因为您想查询....?firstName=Jhon&company.job=developer 之类的资源而添加第三方服务器/服务似乎不正确。

您现在必须(或其他人)负责配置 ES 节点集群、修补、升级、性能、监控等,并为存储在 RDBMS 中的数据编制索引。

如果您需要基于文本的搜索引擎,那么,是的,您必须在 Solr、ES 和其他引擎之间进行评估,但仅仅拥有一个花哨的查询过滤器/查询条件实现不应该证明包含 ES 或类似。

【讨论】:

我们找不到任何库来完成这项工作,而且我们没有时间自己实现它,所以 ES 是我们满足这种需求的最后一个解决方案:/ 意识到,为了防止编写查询条件/过滤器,您现在必须编写一个索引器,从 RDBMS 读取批次并将它们存储在 ES 中,您现在可能不得不处理服务降级在 ES 中由于过多的写入(每当数据库中的数据发生更改)、安全性等。现在可能会觉得这更快,但它很可能会在未来咬你。你看过spring-data-rest吗?

以上是关于如何将 elasticSearch 与数据库和 Spring Boot 集成的主要内容,如果未能解决你的问题,请参考以下文章

如何将2个句点与ElasticSearch和Kibana进行比较?

如何专门使用“Elasticsearch”gem 将 elasticsearch 与 rails 应用程序集成

如何安装部署Elasticsearch?

如何将elasticsearch与本机反应一起使用?

如何将 Spark EMR 集群与 AWS elasticsearch 集群连接起来

如何使用python将Spark数据写入ElasticSearch