簡體   English   中英

用於@searchable 注釋的 AWS Amplify 過濾器

[英]AWS Amplify filter for @searchable annotation

目前我正在為我的社交媒體應用程序使用 DynamoDB 實例。 在設計架構時,我堅持“一張表”規則。 所以我把所有數據都放在同一個表中,比如帖子、用戶、評論等。
現在我想對我的數據進行靈活的查詢。 在這里我發現我可以使用@searchable注釋為一個用@model注釋的表創建一個彈性搜索實例

在我的 GraphQL 模式中,我只有一個@model ,因為我只有一個表。 我現在的問題是我不想讓表中的所有內容都可搜索,因為這很可能非常昂貴。 有些數據不必添加到Elastic Search實例中(例如評論相關數據)。

我怎么辦? 我真的必須將我的架構拆分成多個表才能管理@searchable注釋嗎? 我不能決定是否應該在 Partitionkey / Primarykey 的幫助下將該行存儲到 Elastic Search,就像一個過濾器?

amplify-cli的當前實現使用預定義的python Lambda ,一旦我們將@searchable指令添加到我們的模型之一,就會添加該Lambda

Lambda代碼無法編輯,目前尚無定義自定義Lambda的選項,您已閱讀
https://github.com/aws-amplify/amplify-cli/issues/1113
https://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相關的所有資源。 一個好的起點是

  1. @searchable添加到您的機型之一在schema.grapql
  2. 運行amplify api gql-compile
  3. 將生成的模板復制到構建文件夾\\amplify\\backend\\api\\myapiname\\build\\stacks\\SearchableStack.jsonamplify\\backend\\api\\myapiname\\stacks\\
  4. 從步驟1中添加的模型中刪除@searchable指令
  5. 開始編輯在步驟3中復制的新模板
  6. 添加一個Lambda並將其在模板中用作DynamoDB流的解析器

使用這種方法將使您完全控制與Elasticsearch服務相關的資源,但是,還需要自己完成所有操作。

或者,只需為每個模型創建一個表即可。

希望能幫助到你

現在也可以覆蓋生成的流 function 代碼。

感謝 AWS Support 提供的信息

在相關的 github 問題以及https://github.com/aws-amplify/amplify-category-api/issues/437#issuecomment-1351556948上留言

你只需要跑

  • 放大覆蓋 api
  • 編輯對應的overrode.ts

使用resources.opensearch.OpenSearchStreamingLambdaFunction.code更改代碼

resources.opensearch.OpenSearchStreamingLambdaFunction.functionName = 'python_streaming_function';
resources.opensearch.OpenSearchStreamingLambdaFunction.handler = 'index.lambda_handler';
resources.opensearch.OpenSearchStreamingLambdaFunction.code = {
    zipFile: `
# python streaming function customized code goes here
`
}

資源:[1] https://docs.amplify.aws/cli/graphql/override/#customize-amplify-generated-resources-for-searchable-opensearch-directive
[2]AWS::Lambda::Function 代碼 - 屬性 - https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html#aws-properties-lambda-函數代碼屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM