elasticsearch 当使用Logstash从CSV文件读取时,如何向elasticsearch文档添加数字ID?
使用Logstash从CSV文件导入elasticsearch文档后,我的文档的ID值设置为长字母数字字符串。如何将每个文档ID设置为数值 下面是我的日志存储配置的基本情况:elasticsearch 当使用Logstash从CSV文件读取时,如何向elasticsearch文档添加数字ID?,elasticsearch,logstash,elasticsearch,Logstash,使用Logstash从CSV文件导入elasticsearch文档后,我的文档的ID值设置为长字母数字字符串。如何将每个文档ID设置为数值 下面是我的日志存储配置的基本情况: input { file { path => "/path/to/movies.csv" start_position => "beginning" sincedb_path => "/dev/null" } } filter {
input {
file {
path => "/path/to/movies.csv"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
csv {
columns => ["title","director","year","country"]
separator => ","
}
mutate {
convert => {
"year" => "integer"
}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "movie"
document_type => "movie"
}
stdout {}
}
第一个也是最简单的选项是在CSV中添加一个新的列ID,并将该字段用作文档ID 另一个选择是使用ruby过滤器,它将向事件添加动态ID。此解决方案的缺点是,如果您的CSV发生更改,并且您重新运行管道,则每个文档可能不会获得相同的ID。另一个缺点是,您只需要使用一个辅助进程运行管道,即使用-w 1,因为无法在辅助进程管道之间共享ID_seq变量
filter {
csv {
columns => ["title","director","year","country"]
separator => ","
}
mutate {
convert => {
"year" => "integer"
}
}
# create ID
ruby {
"init" => "id_seq = 0"
"code" => "
event.set('id', id_seq)
id_seq += 1
"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "movie"
document_type => "movie"
document_id => "%{id}"
}
stdout {}
}