最终,我希望为PostgreSql中的数据提供可扩展的搜索解决方案。我的发现指出我使用Logstash将写入事件从Postgres发送到ElasticSearch,但是我还没有找到可用的解决方案。我发现的解决方案涉及使用jdbc-input在一个时间间隔内查询来自Postgres的所有数据,并且不会捕获删除事件。
我认为这是一个常见的用例,所以我希望你们能与我分享你的经验,或者给我一些指导。
答案 0 :(得分:12)
如果您还需要通知DELETE并删除Elasticsearch中的相应记录,Logstash jdbc输入确实无效。您必须使用围绕binlog的解决方案suggested here
但是,如果您仍想使用Logstash jdbc输入,那么您可以做的只是在PostgreSQL中软删除记录,即创建一个新的BOOLEAN列,以便将您的记录标记为deleted
。然后,Elasticsearch中会存在相同的标记,您可以使用term
字段上的简单deleted
查询将其从搜索中排除。
每当您需要执行一些清理时,您可以删除PostgreSQL和Elasticsearch中标记为deleted
的所有记录。
答案 1 :(得分:9)
您还可以查看PGSync。
类似于Debezium,但更容易启动和运行。
PGSync是一个变更数据捕获工具,用于将数据从Postgres迁移到Elasticsearch。 它允许您将Postgres保留为事实来源,并公开结构化非规范化 Elasticsearch中的文档。
您只需定义一个JSON模式来描述其中的数据结构 Elasticsearch。
这是一个示例架构:(您也可以有嵌套的对象)
例如
{ "nodes": [ { "table": "book", "columns": [ "isbn", "title", "description" ] } ] }
PGsync即时为您的文档生成查询。 无需编写类似Logstash的查询。它还支持并跟踪删除操作。
它同时运行轮询和事件驱动模型,以捕获迄今为止所做的更改 并通知在某个时间点发生的更改。 自上次守护程序以来,初始同步轮询数据库是否有更改 已运行并随后发生事件通知(基于触发器并由pg-notify处理) 用于更改数据库。
它的开发开销很小。
您可以轻松地创建一个包含多个关系作为嵌套对象的文档。 PGSync会为您跟踪所有更改。
有关更多详细信息,请查看github存储库。
您可以从PyPI
点安装软件包答案 2 :(得分:3)