Logstash / Elasticsearch JDBC document_id vs document_type?

时间:2017-03-28 18:24:11

标签: elasticsearch logstash logstash-jdbc

因此,当我从logstash使用JDBC导入程序并导出到elasticsearch时,我试图绕过document_type vs document_id。

我终于围绕着索引。但是我们假装从传感器数据表(如温度/湿度/等等)中拉出来,其中传感器数据具有传感器ID ...温度/湿度(天气相关数据),并记录时间。 (所以它是一张大桌子)

我想经常每隔X轮询一次数据库。

document_type vs document_id在这个实例中是什么,这将被存储(或任何你想要调用它)对1个索引。

document_type vs document_id让我感到困惑,特别是在JDBC导入器方面。

如果我将document_id设置为说出我的主键,那么它每次都会被覆盖?那么我每次只有1份数据文件? (这似乎毫无意义)

1 个答案:

答案 0 :(得分:1)

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。如果要设置文档类型,则需要将Logstash中的type字段设置为某个值(将传播到Elasticsearch中)。因此,Elasticsearch中的type field用于对类似文档进行分组。如果您使用jdbc插件导入的表中的所有文档属于同一类型(它们应该是!),您可以在jdbc输入中设置type,如下所示......

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中,您可以通过为该类型设置mapping来利用type字段。例如,您可能需要:

PUT my_index 
{
  "mappings": {
    "weather": { 
      "_all":       { "enabled": false  }, 
      "properties": { 
        "sensor_id":      { "type": "integer"  }, 
        "temp":           { "type": "integer"  }, 
        "humidity":       { "type": "integer" },
        "timestamp":      { "type": "date" }  
      }
    }
  }
}

希望这有帮助! :)