用于 @searchable 注释的 AWS Amplify 过滤器

Posted

技术标签:

【中文标题】用于 @searchable 注释的 AWS Amplify 过滤器【英文标题】:AWS Amplify filter for @searchable annotation 【发布时间】:2019-12-26 02:49:13 【问题描述】:

目前我正在为我的社交媒体应用程序使用 DynamoDB 实例。在设计架构时,我坚持“一张表”规则。所以我将每个数据都放在同一个表中,比如帖子、用户、cmets 等。现在我想对我的数据进行灵活的查询。 Here 我发现我可以使用 @searchable 注释为带有 @model

注释的表创建 Elastic Search 实例

在我的 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-compilebuild文件夹中生成的模板,\amplify\backend\api\myapiname\build\stacks\SearchableStack.json复制到amplify\backend\api\myapiname\stacks\ 从第 1 步中添加的模型中删除 @searchable 指令 开始编辑在第 3 步中复制的新模板 添加一个 Lambda 并在模板中将其用作 DynamoDB Stream 的解析器

使用这种方法可以让您完全控制与 Elasticsearch 服务相关的资源,但也需要您自己完成。

或者,只需为每个模型创建一个表。

希望对你有帮助

【讨论】:

以上是关于用于 @searchable 注释的 AWS Amplify 过滤器的主要内容,如果未能解决你的问题,请参考以下文章

AWS DeviceFarm 忽略 TestNG 注释

iOS 15 中的 SwiftUI .searchable - .navigationBarDrawer(displayMode: .always)

Grails hibernate/Searchable 通过给出以下异常来停止服务器启动

laravel scout searchable trait

text 实时搜索laravel searchable和vue

x86 asm 指令集:任何 _searchable_ 离线参考?