我有一个Apache梁数据流作业,从卡夫卡读取数据,并使用ElasticSearchIO写入ElasticSearch。
我遇到的问题是,在卡夫卡的消息已经有key
场,并使用ElasticSearchIO.Write.withIdFn()
我映射这个领域ElasticSearch记录_id
领域。
有数据的体积大,我不想也被写入到ElasticSearch的key
字段_source
的一部分。
是否有一个选项/解决方法,将允许这样做?
使用Ingest API和remove 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"
}
}
}
]
}
我创建了一个Apache Beam JIRA票说明这个问题。
现在原来的问题不能被解析为使用Apache梁API指数化过程的一部分。
这艾蒂安Chauchot,维护者之一,提出的解决办法是有单独的任务,这将清除后记索引数据。
见Remove a field from a Elasticsearch document例如。
对于未来,如果有人也想利用这样的特征,你可能想跟随链接的票。