提问人:Alex Coleman 提问时间:5/11/2016 最后编辑:John RotensteinAlex Coleman 更新时间:7/21/2022 访问量:2173
有没有办法在通过 AWS Kinesis Firehose 插入时手动设置 ElasticSearch 文档 ID?
Is there a way to manually set an ElasticSearch document id when inserting via AWS Kinesis Firehose?
问:
我设置了一个 AWS Kinesis Firehose Stream,用于将数据馈送到 AWS ElasticSearch 集群中,并且通过将文档发送到 Firehose Stream,后者将文档加载到 ElasticSearch 中,从而成功插入文档。
但是我希望能够在将文档发送到 Firehose Stream 时手动指定/设置文档的值。我成功地使用 AWS PHP SDK 将数据发送到 Firehose,我只是无法确定是否有办法手动设置文档的 .id
id
$firehoseParams = [
'DeliveryStreamName' => 'myStreamName', // REQUIRED
'Record' => [ // REQUIRED
'Data' => '{"json_encoded": "data", ...}', // REQUIRED
],
];
$firehoseResult = $this->_firehoseClient->putRecord($firehoseParams);
我尝试在JSON数据中设置,和值,但都无济于事。id
_id
esDocumentId
有人有什么想法吗?
答:
为此,您可以使用 Kinesis Data Streams,您可以将文档发送到流,并通过 lambda 函数,使用官方 Elasticsearch API 提供 _id 属性。
Firehose 传输流目标是仅追加的,对于 Opensearch (AWS Elasticsearch),不支持更新插入。Firehose 将为其流式传输的每条记录生成一个唯一的 ID,并将其用作文档 ID。目前无法由用户配置。如果您是 AWS Enterprise Support 客户,您可以与您的解决方案架构师 (SA) 或技术客户经理 (TAM) 联系,请求将此功能添加到 Firehose 中。
一种可能的短期解决方案是使用 Kinesis Stream 并触发 Lambda 函数,以使用 Opensearch API 将文档更新插入到 Opensearch。Python 客户端会将 JSON 数据推送到 Kinesis Stream,而不是让 Lambda 函数仅执行转换,而是触发流中的记录、执行转换并处理对 Opensearch 的向上插入。
评论