我的管道是这样的: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
}
}
}
怎么做?
1条答案
按热度按时间b4qexyjb1#
您正在使用
document_id
选项在您的elasticsearch输出中,此选项的作用是告诉elasticsearch,它应该使用此值作为文档id(将是唯一的id)对文档进行索引。因此,如果在源文档中
[doc][_id]
例如具有1000
,的_id
elasticsearch中的字段也将具有相同的值。当您更改源文档中具有
[doc][_id]
等于1000
,它将用_id
等于1000
在ElasticSearch中,因为_id
是独一无二的。为了实现你想要的,你需要删除这个选项
document_id
通过您的输出,elasticsearch将为_id
文档的字段。