logstash到elasticsearch在字段中添加新数据而不是覆盖现有数据?

xytpbqjk  于 2021-06-13  发布在  ElasticSearch
关注(0)|答案(1)|浏览(596)

我的管道是这样的:couchdb->logstash->elasticsearch。每次更新couchdb中的字段值时,elasticsearch中的数据都会被覆盖。我的要求是,在couchdb中更新字段中的数据时,我希望在elasticsearch中创建一个新数据,而不是覆盖现有数据。
我当前的logstash.conf如下所示:

input {
    couchdb_changes {
        host => "<ip>"
        port => <port>
        db => "test_database"
        keep_id => false
        keep_revision => true
        initial_sequence => 0
        always_reconnect => true
        #sequence_path => "/usr/share/logstash/config/seqfile"
    }
}

output {
    if([doc][doc_type] == "HR") {
        elasticsearch {
            hosts => ["http://elasticsearch:9200"]
            index => "hrindex_new_1"
            document_id => "%{[doc][_id]}"
            user => elastic
            password => changeme
        }
    }
    if([doc][doc_type] == "SoftwareEngg") {
        elasticsearch {
            hosts => ["http://elasticsearch:9200"]
            index => "softwareenggindex_new"
            document_id => "%{[doc][_id]}"
            user => elastic
            password => changeme
        }
    }
}

怎么做?

b4qexyjb

b4qexyjb1#

您正在使用 document_id 选项在您的elasticsearch输出中,此选项的作用是告诉elasticsearch,它应该使用此值作为文档id(将是唯一的id)对文档进行索引。

document_id => "%{[doc][_id]}"

因此,如果在源文档中 [doc][_id] 例如具有 1000 ,的 _id elasticsearch中的字段也将具有相同的值。
当您更改源文档中具有 [doc][_id] 等于 1000 ,它将用 _id 等于 1000 在ElasticSearch中,因为 _id 是独一无二的。
为了实现你想要的,你需要删除这个选项 document_id 通过您的输出,elasticsearch将为 _id 文档的字段。

elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "softwareenggindex_new"
    user => elastic
    password => changeme
}

相关问题