在通过AWS Kinesis Firehose插入Elasticsearch文档时,是否有一种手动设置文档ID的方法?

30

我已设置了一个AWS Kinesis Firehose流以将数据提供给AWS ElasticSearch集群,并且我可以通过将它们发送到Firehose流来成功插入文档,由此将其加载到ElasticSearch中。

但是,当发送文档到Firehose流时,我希望能够手动指定/设置文档的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的值,但都没有成功。

有人有任何想法吗?


1
我曾经在几年前尝试更改id,结果导致一些查询不返回正确的值,例如使用平均值时。因此,当你弄清楚它的工作原理时,最好再检查一遍。 - WoodyDRN
要手动设置Elasticsearch索引的文档ID,您需要在数据到达Elasticsearch之前对其进行处理。一种选择是使用AWS Lambda函数在记录被索引之前处理它们。通过利用Lambda,您可以修改记录并设置自定义文档ID。 - Arian Sakhaei
2个回答

0

Firehose Delivery Stream的目的地是追加方式,对于Opensearch(AWS Elasticsearch)而言,不支持upsert。 Firehose将为其流式传输的每个记录生成唯一ID,并将其用作文档ID。 目前无法由用户进行配置。 如果您是AWS企业支持客户,则可以通过与解决方案架构师(SA)或技术账户经理(TAM)交谈来请求将此功能添加到Firehose。

一个可能的短期解决方案是使用Kinesis Stream并触发Lambda函数,使用Opensearch API更新文档。 Python客户端将向Kinesis Stream推送JSON数据,Lambda函数不仅执行转换,还会针对流中的记录触发,执行转换并处理更新到Opensearch的操作。


-1
你可以使用Kinesis Data Streams来实现这个目的,将文档发送到流中,并通过Lambda函数,使用官方Elasticsearch API提供_id属性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接