jdbc 插件将创建一个 JSON 文档,其中每一列都有一个字段。因此,为了与您的示例保持一致,如果您有该数据,它将被导入为如下所示的文档:
{
"sensor_id": 567,
"temp": 90,
"humidity": 6,
"timestamp": "{time}",
"@timestamp": "{time}" // auto-created field, the time Logstash received the document
}
当您说如果您设置document_id
为主键时,您是对的,它将被覆盖。document_id
除非您想更新 Elasticsearch 中的现有文档,否则您可以忽略,我不认为您会想要使用这种类型的数据。让 Elasticsearch 为您生成文档 ID。
现在让我们谈谈document_type
。如果要设置文档类型,则需要将type
Logstash 中的字段设置为某个值(将传播到 Elasticsearch 中)。所以 Elasticsearch 中的type 字段用于对相似的文档进行分组。如果您使用 jdbc 插件导入的表中的所有文档都属于同一类型(它们应该是!),您可以type
像这样在 jdbc 输入中设置...
input {
jdbc {
jdbc_driver_library => "mysql-connector-java-5.1.36-bin.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
jdbc_user => "mysql"
parameters => { "favorite_artist" => "Beethoven" }
schedule => "* * * * *"
statement => "SELECT * from songs where artist = :favorite_artist"
...
type => "weather"
}
}
现在,在 Elasticsearch 中,您可以通过为该类型type
设置映射来利用该字段。例如,您可能想要:
PUT my_index
{
"mappings": {
"weather": {
"_all": { "enabled": false },
"properties": {
"sensor_id": { "type": "integer" },
"temp": { "type": "integer" },
"humidity": { "type": "integer" },
"timestamp": { "type": "date" }
}
}
}
}
希望这可以帮助!:)