ElasticSearch IO如何从JSON文件写入之前删除ID

问题描述 投票:0回答:2

我有一个Apache梁数据流作业,从卡夫卡读取数据,并使用ElasticSearchIO写入ElasticSearch。

我遇到的问题是,在卡夫卡的消息已经有key场,并使用ElasticSearchIO.Write.withIdFn()我映射这个领域ElasticSearch记录_id领域。

有数据的体积大,我不想也被写入到ElasticSearch的key字段_source的一部分。

是否有一个选项/解决方法,将允许这样做?

java elasticsearch apache-kafka google-cloud-dataflow apache-beam
2个回答
0
投票

使用Ingest APIremove processor you'll能够解决这个很容易只使用elasticsearch集群。您也可以simulate摄取管道和结果。

从来就准备这可能会遮住你的情况下,例如:

POST _ingest/pipeline/_simulate
{
  "pipeline": {
    "description": "remove id form incoming docs",
    "processors": [
      {"remove": {
        "field": "id",
        "ignore_failure": true
      }}
    ]
  },
  "docs": [
      {"_source":{"id":"123546", "other_field":"other value"}}
    ]
}

你看,有含申请“身份证”一个测试文档。该字段中不存在的响应/结果了:

{
  "docs" : [
    {
      "doc" : {
        "_index" : "_index",
        "_type" : "_type",
        "_id" : "_id",
        "_source" : {
          "other_field" : "other value"
        },
        "_ingest" : {
          "timestamp" : "2018-12-03T16:33:33.885909Z"
        }
      }
    }
  ]
}

0
投票

我创建了一个Apache Beam JIRA票说明这个问题。

现在原来的问题不能被解析为使用Apache梁API指数化过程的一部分。

这艾蒂安Chauchot,维护者之一,提出的解决办法是有单独的任务,这将清除后记索引数据。

Remove a field from a Elasticsearch document例如。

对于未来,如果有人也想利用这样的特征,你可能想跟随链接的票。

© www.soinside.com 2019 - 2024. All rights reserved.