因此,当我使用来自 logstash 的 JDBC 导入器并导出到 elasticsearch 时,我试图围绕 document_type 与 document_id 进行比较。
我终于把头绕在索引上。但是让我们假装我从一个传感器数据表(如温度/湿度/等...)中提取,其中包含传感器 ID 的...温度/湿度(与天气相关的数据)并记录了时间。 (所以这是一张大 table )
而且我想经常每隔 X 轮询一次数据库。
在这种情况下,document_type vs document_id 会是什么,这将针对 1 个索引存储(或任何您想调用的名称)。
document_type vs document_id 让我很困惑,尤其是在 JDBC 导入器方面。
如果我将 document_id 设置为说我的主键,它不会每次都被覆盖吗?所以我每次只有一份数据文件? (这似乎毫无意义)
最佳答案
jdbc plugin将为每一列创建一个包含一个字段的 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 中)。所以type field在 Elasticsearch 中用于对相似的文档进行分组。如果您使用 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
通过设置 mapping 字段对于那种类型。例如,您可能想要:PUT my_index
{
"mappings": {
"weather": {
"_all": { "enabled": false },
"properties": {
"sensor_id": { "type": "integer" },
"temp": { "type": "integer" },
"humidity": { "type": "integer" },
"timestamp": { "type": "date" }
}
}
}
}
希望这可以帮助! :)
关于elasticsearch - Logstash/Elasticsearch JDBC document_id vs document_type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43077163/