php 通过AWS Kinesis Firehose插入时,是否有方法手动设置ElasticSearch文档ID?

iecba09b  于 5个月前  发布在  PHP
关注(0)|答案(2)|浏览(46)

我设置了一个AWS Kinesis Firehose Stream来将数据馈送到AWS ElasticSearch集群中,我可以通过将文档发送到Firehose Stream来成功插入文档,Firehose Stream将文档加载到ElasticSearch中。
但是我希望在将文档发送到Firehose Stream时能够手动指定/设置文档的id值。我正在成功地使用AWS PHP SDK将数据发送到Firehose,我只是不知道是否有方法手动设置文档的id

$firehoseParams = [
    'DeliveryStreamName' => 'myStreamName', // REQUIRED
    'Record' => [ // REQUIRED
        'Data' => '{"json_encoded": "data", ...}', // REQUIRED
    ],
];
$firehoseResult = $this->_firehoseClient->putRecord($firehoseParams);

字符串
我尝试在JSON数据中设置id_idesDocumentId值,但都无济于事。
有人有什么想法吗?

hgtggwj0

hgtggwj01#

Firehose Delivery Stream目的地是仅附加的,在Opensearch的情况下,(AWS Elasticsearch),不支持upsert。Firehose将为它流式传输的每条记录生成一个唯一ID,并将其用作文档ID。目前无法进行用户配置。如果您是AWS企业支持客户,您可以通过与您的解决方案架构师(SA)或技术客户经理(TAM)交谈来请求将此功能添加到Firehose。
一个可能的短期解决方案是使用Kinesis Stream并触发Lambda函数,以使用Opensearch API将文档upsert到Opensearch。Python客户端将JSON数据推送到Kinesis Stream,而不是让Lambda函数只执行转换,它将触发流中的记录,执行转换,并处理upsert到Opensearch。

smdnsysy

smdnsysy2#

您可以使用Kinesis Data Streams来实现此目的,您可以将文档发送到流,并通过lambda函数,您可以使用官方Elasticsearch API提供_id属性。

相关问题