使用logstash将数据从MySQL索引到ElasticSearch时,只显示第一行

时间:2016-01-26 06:07:02

标签: jdbc elasticsearch logstash

这是我的logstash配置文件:

          input
    {
        jdbc 
        {

         jdbc_driver_library => "/home/vatsa/logstash/mysql-connector-java-5.1.38-bin.jar"


         jdbc_driver_class => "com.mysql.jdbc.Driver"

         jdbc_connection_string => "jdbc:mysql://localhost:3306/stud"

         jdbc_user => "root"
         jdbc_password => ""
          statement => "select * from det"
       }
    }
  output  

 {
  elasticsearch 
    {

    index => "det"
    document_type => "contact"
    document_id => "%{uid}"
    hosts => "localhost:9200"
}stdout { codec => json_lines }
}

创建了Logstash启动和关闭。但是当我使用

执行get请求时
curl -XGET 'localhost:9200/det/_search?pretty&q=*'

这是输出:

"hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : 
[   {
      "_index" : "det",
      "_type" : "contact",
      "_id" : "%{uid}",
      "_score" : 1.0,
      "_source":{"ID":5,"NAME":"SHUBH","USN":"099","@version":"1","@timestamp":"2016-01-26T05:42:08.362Z"}
    } ]
  }

但是表中有5个实体。这是什么原因?如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

正如您在索引文档中看到的那样,它的_id设置为"%{uid}",这意味着您的SQL表中没有任何uid字段可以在Elasticsearch中用作文档的ID,因此,字符串%{uid}被设置为ID。

由于每个索引文档都具有相同的ID,因此它会覆盖具有该ID的前一个ID,因此您只能看到一个文档。

尝试确保uid SQL表中有det字段,或使用正确的ID字段作为document_id输出中的elasticsearch参数。也许尝试使用ID字段

elasticsearch {
   index => "det"
   document_type => "contact"
   document_id => "%{ID}"             <--- change this ine
   hosts => "localhost:9200"
}