elasticsearch 当使用Logstash从CSV文件读取时,如何向elasticsearch文档添加数字ID?,elasticsearch,logstash,elasticsearch,Logstash" /> elasticsearch 当使用Logstash从CSV文件读取时,如何向elasticsearch文档添加数字ID?,elasticsearch,logstash,elasticsearch,Logstash" />

elasticsearch 当使用Logstash从CSV文件读取时,如何向elasticsearch文档添加数字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 {

使用Logstash从CSV文件导入elasticsearch文档后,我的文档的ID值设置为长字母数字字符串。如何将每个文档ID设置为数值

下面是我的日志存储配置的基本情况:

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 {}
}