Elasticsearch 最佳实践:直接从前端或后端使用

Posted

技术标签:

【中文标题】Elasticsearch 最佳实践:直接从前端或后端使用【英文标题】:Elasticsearch best practices: use directly from the frontend or from the backend 【发布时间】:2020-03-19 22:06:21 【问题描述】:

我正在构建一个 Web 应用程序,它有一个使用 React 的前端和一个使用 NodeJS 构建的 graphql 后端服务。一个功能是搜索,我一直在探索 Elasticsearch。我注意到有像 React 的响应式搜索这样的库,可让您连接到 Elasticsearch 端点,并为您提供自己生成查询的 UI 组件,这使得设置基本搜索非常容易,但对于自定义查询则很复杂。所以,我决定从后端进行搜索并通过graphql返回数据。我担心的是哪种连接方法更好以及为什么。

注意:还包括有关 Elasticsearch 的任何最佳实践。我正在使用 AWS 的托管 Elasticsearch 集群。

【问题讨论】:

【参考方案1】:

在使用 elasticsearch 支持搜索功能时要记住的最重要的事情是能够在不停机的情况下切换索引。 Elasticsearch Aliases 来解决这个问题。你可以在这里阅读更多 - https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-aliases.html

简而言之,它位于您的索引之前,因此您永远不会直接与来自前端的索引进行交互。它应该始终通过别名。如果您需要在新索引中重新索引数据,您只需切换别名即可。更像是蓝绿色部署。

关于直接使用还是通过后端使用取决于用例。例如。如果您使用 AWS elasticsearch 并且需要某种身份验证,则应让后端与 elasticsearch 对话(后端使用 IAM 角色生成 AWS 签名)。如果你通过前端来做,你可能不得不暴露你的秘密,这显然不是一个好策略。

您应该考虑使用后端的另一个原因是,它可以让您灵活地更有效地处理重大更改。例如,如果您正在更改结构,您可以只修改后端以返回您的前端所期望的结构。

我已广泛使用 AWS Elasticsearch。如果您正在寻找任何具体的东西,请告诉我。

【讨论】:

以上是关于Elasticsearch 最佳实践:直接从前端或后端使用的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch最佳实践之核心概念与原理

生产环境中的 Elasticsearch 配置和最佳实践

PHP MVC 最佳实践 - 将 Session 变量从控制器传递给模型类或直接在模型中访问

ElasticSearch——数据建模最佳实践

Elasticsearch集成Hadoop最佳实践.pdf(内含目录)

Elasticsearch最佳实践之使用场景