首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Elasticsearch中更新以前的文档

在Elasticsearch中更新以前的文档
EN

Stack Overflow用户
提问于 2021-04-15 17:22:39
回答 1查看 399关注 0票数 0

在编写logstash配置时,我面临以下问题。输入文件如下所示

代码语言:javascript
复制
{
  "Id": 1,
  "item.status":"PENDING_APPROVAL",
  "originalId": 1,
  "process": "Item creation"
}

将项目id : 1插入到弹性搜索中。同一项随后被批准,并且该批准还生成一个日志,字段originalId为1,表示id 1的项已被批准。

代码语言:javascript
复制
{
  "Id": 2,
  "item.status":"APPROVED",
  "originalId": 1,
  "process" : "Item approval"
}

我在这里的问题是如何更新插入数据的状态,同时也插入已批准的日志,以便弹性搜索中的结果数据应该类似于

代码语言:javascript
复制
{
  "Id": 1,
  "item.status":"APPROVED",
  "originalId": 1,
  "process": "Item creation"
}
{
  "Id": 2,
  "item.status":"APPROVED",
  "originalId": 1,
  "process" : "Item approval"
}

我确实在logstash中尝试了doc_as_upsert方法。status字段将得到更新的,但审批文档不会插入。我怎样才能做到这一点?

我对logstash非常陌生,所以任何帮助都是非常感谢的:)。

这是我的储藏室。

代码语言:javascript
复制
  input {
  file {
     //input file location
  }
}

filter {

    json{
        skip_on_invalid_json => true
        source => "message"
    }

    if ( [process] in  ["Item approval"] ) {

       prune{
                whitelist_names => ["item.status","originalId"]
           } 

    }
}

output {

    elasticsearch {
                action => "update"
                hosts => [ "localhost:9200" ]
                index => "items"
                document_id => "%{originalId}"
                doc_as_upsert => true
            }
   
}
EN

回答 1

Stack Overflow用户

发布于 2021-04-15 17:52:02

您必须使用两个elasticsearch输出。一个用来重新插入,一个用来索引文档。

代码语言:javascript
复制
elasticsearch {
    action => "update"
    hosts => [ "localhost:9200" ]
    index => "items"
    document_id => "%{originalId}"
    doc_as_upsert => true
}
elasticsearch {
    hosts => [ "localhost:9200" ]
    index => "items"
    document_id => "%{Id}"
}

如果要将完整的文档转到一个输出,而只将白色字段转到另一个输出,则使用具有叉道模式的管道到管道通信。将文档写入两个管道,一个是白名单和向上插入,另一个是索引文档。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67113163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档