【发布时间】:2020-04-12 22:15:52
【问题描述】:
我正在寻找一种将 MongoDB 中的集合与 Elastic Search (ES) 同步的方法。目标是将 MongoDB 作为主要数据源,并将 MongoDB 用作全文搜索引擎。 (我项目的业务逻辑是用python写的)。
网上有几种方法可用。
- Mongo 连接
- 河流插件
- logstash-input-mongodb(logstash 插件)see similar question
- 运输工具
但是,大多数建议都是几年前的,我找不到任何支持当前版本 ES (ES 7.4.0) 的解决方案。有人使用这样的构造吗?你有什么建议吗?
我考虑过放弃 MongoDB 作为主要数据源,只使用 ES 进行存储和搜索。虽然我读过 ES 不应该用作主要数据源。
编辑
谢谢@gurdeep.sabarwal。我按照你的方法。但是,我无法将 mongodb 同步到 ES。我的配置如下:
input {
jdbc {
# jdbc_driver_library => "/usr/share/logstash/mongodb-driver-3.11.0-source.jar"
jdbc_driver_library => "/usr/share/logstash/mongojdbc1.5.jar"
# jdbc_driver_library => "/usr/share/logstash/mongodb-driver-3.11.1.jar"
# jdbc_driver_class => "mongodb.jdbc.MongoDriver"
# jdbc_driver_class => "Java::com.mongodb.MongoClient"
jdbc_driver_class => "Java::com.dbschema.MongoJdbcDriver"
jdbc_driver_class => "com.dbschema.MongoJdbcDriver"
# jdbc_driver_class => ""
jdbc_connection_string => "jdbc:mongodb://<myserver>:27017/<mydb>"
jdbc_user => "user"
jdbc_password => "pw"
statement => "db.getCollection('mycollection').find({})"
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200/"]
index => "myindex"
}
}
这让我离目标更近了一点。但是,我收到以下错误:
错误:Java::com.dbschema.MongoJdbcDriver 未加载。您确定您在 :jdbc_driver_library 中包含了正确的 jdbc 驱动程序吗?
异常:LogStash::ConfigurationError`
由于没有成功,我也尝试了注释版本,但没有成功。
【问题讨论】:
-
你可以使用logstash将数据从mongo存储到es,反之亦然(任何版本),你只需要jdbc驱动连接mongo
-
@Dejan Maric:logstash + JDBC 驱动插件的组合是否支持同步。例如。当 MongoDB 中的现有文档发生更改时,是否会被 ES 重新索引?
-
如果你设置 scheduler snd sql_last_value 就可以了
标签: python-3.x mongodb elasticsearch