Logstash 到 Elasticsearch 在字段中添加新数据而不是覆盖现有数据?
Logstash to Elasticsearch adding new data in the fields instead of overwriting the existing data?
我的管道是这样的: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
}
}
}
如何操作?
您在 elasticsearch 输出中使用了 document_id
选项,这个选项的作用是告诉 elasticsearch 它应该使用这个值作为文档 id 来索引文档,这将是一个唯一的 id。
document_id => "%{[doc][_id]}"
因此,如果在您的源文档中字段 [doc][_id]
具有例如 1000
的值,则 elasticsearch 中的 _id
字段也将具有相同的值。
当您更改源文档中 [doc][_id]
等于 1000
的内容时,它会替换 elasticsearch 中 _id
等于 1000
的文档因为 _id
是唯一的。
为了达到您的要求,您需要从输出中删除选项 document_id
,这样 elasticsearch 将为文档的 _id
字段生成一个唯一值。
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "softwareenggindex_new"
user => elastic
password => changeme
}
我的管道是这样的: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
}
}
}
如何操作?
您在 elasticsearch 输出中使用了 document_id
选项,这个选项的作用是告诉 elasticsearch 它应该使用这个值作为文档 id 来索引文档,这将是一个唯一的 id。
document_id => "%{[doc][_id]}"
因此,如果在您的源文档中字段 [doc][_id]
具有例如 1000
的值,则 elasticsearch 中的 _id
字段也将具有相同的值。
当您更改源文档中 [doc][_id]
等于 1000
的内容时,它会替换 elasticsearch 中 _id
等于 1000
的文档因为 _id
是唯一的。
为了达到您的要求,您需要从输出中删除选项 document_id
,这样 elasticsearch 将为文档的 _id
字段生成一个唯一值。
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "softwareenggindex_new"
user => elastic
password => changeme
}