将数据从Neptune复制到AWS ElasticsearchService时应用定制的转换逻辑

问题描述 投票:0回答:1

Amazon Neptune now supports Full-Text Search Using Amazon Elasticsearch Service。它会自动将数据从海王星复制到Elasticsearch。我的问题是:海王星在复制期间是否支持自定义转换逻辑?例如,我在Neptune中有一个像Brand(id=123, name="Calvin Klein")一样的顶点,并且我想对该顶点应用定制的转换逻辑,以便将该顶点转换为Elasticsearch中的文档{id:123, name:"Calvin Klein", normalizedName:"calvinklein"}

amazon-web-services amazon-neptune aws-elasticsearch
1个回答
0
投票

是否支持自定义逻辑?

是的,Neptune ES复制过程确实允许用户拥有自己的转换逻辑,用于在Elastic Search中存储数据。但是必须小心,因为更改ES文档可能会破坏NeptuneGremlin通过ES进行的文本搜索支持,因为它需要文档中的所有原始字段。如果需要,您总是可以将新字段添加到弹性搜索文档中。

请参考Neptune data model for Elastic search

可以在Gremlin FTS查询中使用自定义ES字段吗?

如果以与Gremlin属性在ES文档中存储方式相同的方式(即作为“谓词”字段内的嵌套字段来存储,则可以在Gremlin FTS查询中使用自定义ES字段。

Ex: if {normalizedName:"calvinklein"} is to be added as custom field then ES document should store it as: { ....... // Original fields "predicates": { ....... // Original Properties "normalizedName":[ { "value": "calvinklein" } ] }

可以像其他任何属性一样搜索此字段,但只能使用FTS查询。 (因为该字段不是在Neptune中,而是在ES中)

我如何添加自定义转换逻辑?

您所引用的示例使用基于Python的AWS Lambda处理程序,使用NeptuneStreams将数据从Neptune复制到Elastic Search。它从NeptuneStreams获取更改日志,并将它们转换为ES upsert请求。

一个人可以提供自己的Lambda轮询器处理程序实现,以处理Stream记录。请关注以下博客文章以获取详细信息:

https://aws.amazon.com/blogs/database/capture-graph-changes-using-neptune-streams/

根据上述博客文章,请按照以下步骤操作:

  1. 创建自定义的流处理程序类,该类继承自轮询框架的AbstractHandler并实现handle_records()方法。
  2. 完成流处理程序的创作后,以ZIP存档的形式创建一个部署程序包,并将其上传到S3。
  3. 要使用新的zip存档,请在CFN模板中为处理程序包提供LambdaS3Bucket和LambdaS3Key。
  4. 还提供您的StreamRecordsHandler的名称,即您创建的自定义处理程序。
© www.soinside.com 2019 - 2024. All rights reserved.