我正在创建一个管道,使用Logstash从MongoDB获取数据到ElasticSearch。 我正在使用dbschema mongodb jdbc驱动程序。我可以使用驱动程序连接到数据库,但我遇到了_id的问题。就像在MongoDB中它的类型对象所以我遇到了转换器的问题。这是我得到的错误。
Exception when executing JDBC query {:exception=>#<Sequel::DatabaseError: Java::OrgLogstash::MissingConverterException: Missing Converter handling for full class name=org.bson.types.ObjectId, simple name=ObjectId>}
我的管道如下:
input{
jdbc{
jdbc_driver_library => "C:/logstash-6.1.0/logstash-6.1.0/bin/driver/mongo/dbschema/mongojdbc1.2.jar"
jdbc_driver_class => "Java::com.dbschema.MongoJdbcDriver"
jdbc_connection_string => "jdbc:mongodb://abc.com:27017/test"
jdbc_user => ""
statement => "db.getCollection('Employee').find({})"
codec => json
}
}
output {
elasticsearch {
hosts => 'http://localhost:9200'
index => 'mongodbschema'
codec => json
}
stdout { codec => rubydebug }
}
我有什么方法可以转换/强制转换或在过滤器中执行某些操作来将_id的数据类型从对象更改为字符串
答案 0 :(得分:0)
在过滤器中尝试此代码
filter {
mutate {
remove_field => [ "_id" ]
}}
答案 1 :(得分:0)
尝试
statement => "db.getCollection('Employee').find({ },{'_id': false})"
答案 2 :(得分:0)
由于在elasticsearch _id
中是保留字段(您可以在PUT操作中将_id
传递给索引API来更新文档),因此必须应用使mongodb _id
发生突变的过滤器,例如:
filter {
mutate {
rename => [ "_id", "mongo_id" ]
}
}