目前我正在使用DynamoDB示例作为我的社交媒体应用程序。在设计模式时,我坚持“一个表”的规则。所以我把所有数据放在同一个表中,比如帖子、用户、评论等。
现在我想对数据进行灵活的查询,我发现我可以使用**@searchable
注解为一个用@model
注解的表创建一个Elastic Search示例
在我的GraphQL模式中,我只有一个@model
,因为我只有一个表。我现在的问题是,我不想让表中的所有内容都是可搜索的,因为这很可能会非常昂贵。有些数据不必添加到 Elastic Search 示例中(例如评论相关数据)。
我该如何处理它?我真的必须将我的模式拆分成多个表才能管理@searchable
**注解吗?我不能决定是否应该在Partitionkey / Primarykey的帮助下将该行存储到ElasticSearch中,就像过滤器一样吗?
2条答案
按热度按时间kognpnkq1#
amplify-cli
的当前实现使用了一个预定义的python
Lambda,当我们将**@searchable指令添加到其中一个模型中时,就会添加这个预定义的python
Lambda。无法编辑Lambda代码,并且当前没有定义自定义Lambda的选项,您已了解相关信息
https://github.com/aws-amplify/amplify-cli/issues/1113
https://github.com/aws-amplify/amplify-cli/issues/1022
如果你想要一个自定义的Lambda**,你可以过滤进入Elasticsearch示例的内容,你可以按照www.example.com描述的步骤操作https://github.com/aws-amplify/amplify-cli/issues/1113#issuecomment-476193632
最接近的方法是在
amplify\backend\api\myapiname\stacks\
中创建一个模板,您可以在其中管理与Elasticsearch相关的所有资源。1.将**@searchable添加到schema.grapql中的一个模型中
1.运行
amplify api gql-compile
1.将 build 文件夹中生成的模板
\amplify\backend\api\myapiname\build\stacks\SearchableStack.json
复制到amplify\backend\api\myapiname\stacks\
1.从步骤1中添加的模型中删除@searchable指令
1.开始编辑在步骤3中复制的新模板
1.添加Lambda并在模板中将其用作DynamoDB Stream的解析器
使用此方法将使您能够完全控制与Elasticsearch服务**相关的资源,但也需要您自己完成所有操作。
或者,只需为每个模型创建一个表。
希望能有所帮助
nkhmeac62#
现在也可以覆盖生成的流功能代码。
感谢AWS支持部门提供的信息
我也在相关的github问题上留言https://github.com/aws-amplify/amplify-category-api/issues/437#issuecomment-1351556948
你只需要跑
使用
resources.opensearch.OpenSearchStreamingLambdaFunction.code
更改代码参考资料:[1] https://docs.amplify.aws/cli/graphql/override/#customize-amplify-generated-resources-for-searchable-opensearch-directive
[2]AWS::Lambda::函数代码-属性-https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html#aws-properties-lambda-function-code-properties