将 postgreSql 数据与 ElasticSearch 同步

Sync postgreSql data with ElasticSearch

最终我想为 PostgreSql 中的数据提供一个可扩展的搜索解决方案。我的发现使我倾向于使用 Logstash 将写事件从 Postgres 发送到 ElasticSearch,但是我还没有找到可用的解决方案。我发现的解决方案涉及使用 jdbc-input 以一定间隔从 Postgres 查询 all 数据,并且未捕获删除事件。

我认为这是一个常见的用例,所以我希望你们能与我分享你的经验,或者给我一些指导。

如果您还需要在 DELETE 时收到通知并删除 Elasticsearch 中的相应记录,那么 Logstash jdbc 输入确实无济于事。您必须使用解决二进制日志的解决方案,如

但是,如果您仍想使用 Logstash jdbc 输入,您可以简单地在 PostgreSQL 中软删除记录,即创建一个新的 BOOLEAN 列以将您的记录标记为 deleted。然后,Elasticsearch 中将存在相同的标志,您可以通过 deleted 字段上的简单 term 查询将它们从搜索中排除。

每当您需要执行一些清理时,您可以删除 PostgreSQL 和 Elasticsearch 中标记为 deleted 的所有记录。

请看Debezium。这是一个变更数据捕获 (CDC) 平台,可让您传输数据

我创建了一个简单的 github repository,展示了它是如何工作的

你也可以看看PGSync

它与 Debezium 类似,但起床和 运行ning 更容易。

PGSync 是一种更改数据捕获工具,用于将数据从 Postgres 移动到 Elasticsearch。 它允许您将 Postgres 作为您的真实来源并公开结构化的非规范化 Elasticsearch 中的文档。

您只需定义一个 JSON 模式来描述数据的结构 弹性搜索。

这是一个示例模式:(您也可以有嵌套对象)

例如

{
    "nodes": {
        "table": "book",
        "columns": [
            "isbn",
            "title",
            "description"
        ]
    }
}

PGsync 即时为您的文档生成查询。 无需像 Logstash 那样编写查询。它还支持和跟踪删除操作。

它同时运行轮询和事件驱动模型来捕获迄今为止所做的更改 以及在某个时间点发生的变化的通知。 初始同步轮询数据库以获取自上次守护进程以来的更改 是 运行 然后是事件通知(基于触发器并由 pg-notify 处理) 用于更改数据库。

它的开发开销很小。

  • 如上所述创建架构
  • 将 pgsync 指向您的 Postgres 数据库和 Elasticsearch 集群
  • 启动守护进程。

您可以轻松创建包含多个关系作为嵌套对象的文档。 PGSync 会为您跟踪任何更改。

查看 github 存储库了解更多详情。

您可以从 PyPI

安装软件包