用于 @searchable 注释的 AWS Amplify 过滤器
Posted
技术标签:
【中文标题】用于 @searchable 注释的 AWS Amplify 过滤器【英文标题】:AWS Amplify filter for @searchable annotation 【发布时间】:2019-12-26 02:49:13 【问题描述】:目前我正在为我的社交媒体应用程序使用 DynamoDB 实例。在设计架构时,我坚持“一张表”规则。所以我将每个数据都放在同一个表中,比如帖子、用户、cmets 等。现在我想对我的数据进行灵活的查询。 Here 我发现我可以使用 @searchable
注释为带有 @model
在我的 GraphQL 架构中,我只有一个 @model
,因为我只有一个表。我现在的问题是我不想让表中的所有内容都可搜索,因为这很可能非常昂贵。有一些数据不必添加到 Elastic Search 实例中(例如评论相关数据)。 我该如何处理呢?我真的必须将架构拆分为多个表才能管理 @searchable
注释吗?我不能决定是否应该在 Partitionkey / Primarykey 的帮助下将该行存储到 Elastic Search 中,就像一个过滤器一样?
【问题讨论】:
【参考方案1】:amplify-cli
的当前实现使用预定义的 python
Lambda,一旦我们将 @searchable 指令添加到我们的模型之一,就会添加该预定义。 p>
Lambda 代码无法编辑,目前没有定义自定义 Lambda 的选项,您已了解它https://github.com/aws-amplify/amplify-cli/issues/1113https://github.com/aws-amplify/amplify-cli/issues/1022
如果您想要一个自定义 Lambda,您可以在其中过滤进入 Elasticsearch 实例的内容,您可以按照此处所述的步骤进行操作 https://github.com/aws-amplify/amplify-cli/issues/1113#issuecomment-476193632
您最接近的方法是在amplify\backend\api\myapiname\stacks\
中创建一个模板,您可以在其中管理与Elasticsearch 相关的所有资源。一个好的起点是
-
在 schema.grapql 中将 @searchable 添加到您的模型之一
运行
amplify api gql-compile
将build文件夹中生成的模板,\amplify\backend\api\myapiname\build\stacks\SearchableStack.json
复制到amplify\backend\api\myapiname\stacks\
从第 1 步中添加的模型中删除 @searchable 指令
开始编辑在第 3 步中复制的新模板
添加一个 Lambda 并在模板中将其用作 DynamoDB Stream 的解析器
使用这种方法可以让您完全控制与 Elasticsearch 服务相关的资源,但也需要您自己完成。
或者,只需为每个模型创建一个表。
希望对你有帮助
【讨论】:
以上是关于用于 @searchable 注释的 AWS Amplify 过滤器的主要内容,如果未能解决你的问题,请参考以下文章
iOS 15 中的 SwiftUI .searchable - .navigationBarDrawer(displayMode: .always)
Grails hibernate/Searchable 通过给出以下异常来停止服务器启动
laravel scout searchable trait