这是我的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个实体。这是什么原因?如何解决这个问题?
答案 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"
}