代码之家  ›  专栏  ›  技术社区  ›  marknorkin

ElasticSearch IO如何在编写之前从JSON文档中删除id

  •  0
  • marknorkin  · 技术社区  · 6 年前

    我有一个ApacheBeam流媒体作业,它从Kafka读取数据,并使用ElasticSearchIO将数据写入ElasticSearch。

    我遇到的问题是卡夫卡中的信息已经 key 字段,并使用 ElasticSearchIO.Write.withIdFn() 我正在将此字段映射到文档 _id

    有大量的数据,我不想 钥匙 字段也要写入ElasticSearch,作为 _source

    是否有允许这样做的选项/解决方法?

    2 回复  |  直到 6 年前
        1
  •  0
  •   ibexit    6 年前

    Ingest API remove processor 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"}}
        ]
    }
    

    你看,有一个测试文档包含一个归档的“id”。此字段不再出现在响应/结果中:

    {
      "docs" : [
        {
          "doc" : {
            "_index" : "_index",
            "_type" : "_type",
            "_id" : "_id",
            "_source" : {
              "other_field" : "other value"
            },
            "_ingest" : {
              "timestamp" : "2018-12-03T16:33:33.885909Z"
            }
          }
        }
      ]
    }
    
        2
  •  0
  •   Community CDub    5 年前

    我已经在中创建了一个票证 Apache Beam JIRA 描述这个问题。

    目前,原始问题无法作为使用ApacheBeamAPI的索引化过程的一部分来解决。

    维护人员之一Etienne Chauchot提出的解决方案是 有单独的任务,将清除索引后的数据。

    看见 Remove a field from a Elasticsearch document

    将来,如果有人也希望利用这一功能,您可能希望遵循链接的票证。