我已经在 Elasticsearch 中有一个带有 id 的文档(假设为 1
)。我需要配置 Logstash,以便将具有相同 ID 的事件插入到 Elasticsearch 中。
已存在 ID 的示例文档:
{
"name": "abc"
}
Logstash 事件:
{
"address": "new york",
"mobile no": "xxx"
}
Elasticsearch 中的最终结果:
{
"name": "abc",
"address": "new york",
"mobile no": "xxx"
}
我尝试在输出插件中使用更新脚本:
elasticsearch {
action => "update"
hosts => [ "localhost:9200" ]
index => "details"
scripted_upsert => true
document_id => "%{id}"
script => "ctx._source.name = params.event.get('name')"
}
这允许我添加每个字段(name
、address
等),但我需要插入整个 json 事件而不指定每个字段。如何做到这一点?
答案 0 :(得分:0)
我认为这比你想象的要容易;)
Elasticsearch 支持更新插入:https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html#plugins-outputs-elasticsearch-doc_as_upsert
因此将 action => update
与 doc_as_upsert => true
结合起来应该可以完成这项工作:
elasticsearch {
action => "update"
hosts => [ "localhost:9200" ]
index => "details"
doc_as_upsert => true
document_id => "%{id}"
}