我目前正在
NestJS
上开发电子商务后端,并寻找在应用程序中实现 ElasticSearch 的最正确方法,问题是,我真的不明白 ElasticSearch 如何了解我的 PostgreSQL
数据库中的记录我通过像 Prisma 这样的 ORM 工具处理所有这些 CRUD 操作,并且从未与 ElasticSearch 同步,甚至没有在后端为我希望 ElasticSearch 进行搜索的记录创建索引。所以,我猜 ElasticSearch 的唯一方法要从数据库获取最新的记录可能是使用 Logstash
以便它从 Postgre 中选择记录,以便它可以将它们全部发送到 ElasticSearch
...我现在在这两个选项之间来回切换,要么我会在后端创建记录之前为每个产品创建索引,这意味着数据库(PostgreSQL)上的任何更改都不会与ElasticSearch通信,因此ElasticSearch将无法执行有效的搜索,最终结束不从那里检索更新的数据,或者我将 PostgreSQL 连接到 Logstash 作为数据源,这看起来是最佳实践。另一件悬在我头上的事情是,大公司如何处理这个问题,以及如何将如此先进的搜索引擎实现到 NestJS 项目中,无论是否使用 ELK,我不需要解决方法,因为这将是一个相对先进的电子商务应用程序,并且我必须只应用最佳实践。
任何建议、提示都非常感谢
根据您的使用案例,这些是您可以遵循的快速提示 -
索引创建 - 由于您有一个电子商务网站,假设您的数据不是时间序列数据。在这种情况下,您可以创建简单的索引,在其中添加所有记录。根据您的搜索要求,您需要检查是否要将 Postgres 表和索引中的数据非规范化为 ES 索引中的单个记录,或者您可以为不同的搜索要求创建不同的索引。
数据迁移 - 在这种用例中,您可以使用 Elasticsearch 来存储可搜索的数据。 Logstash 是帮助将数据从 Postgres 同步到 Elasticsearch 的最佳工具。
除了logstash之外,人们还使用kafka将数据直接流式传输到Elasticsearch(仅当系统中已安装Kafka时才建议这样做)。
您还可以为 Elasticsearch 编写另一个摄取,您的数据将同时插入到 PG 和 ES 中。
所有操作将实时同步。
但是 Logstash 非常知名,并且大量用于此类同步。所以 ELK 将帮助您同步数据。
NestJS - 您可以使用 Elasticsearch 包从 Elasticsearch 查询同步数据。你可以尝试一下这个。