[英]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相關的所有資源。 一個好的起點是
amplify api gql-compile
\\amplify\\backend\\api\\myapiname\\build\\stacks\\SearchableStack.json
以amplify\\backend\\api\\myapiname\\stacks\\
使用這種方法將使您完全控制與Elasticsearch服務相關的資源,但是,還需要自己完成所有操作。
或者,只需為每個模型創建一個表即可。
希望能幫助到你
現在也可以覆蓋生成的流 function 代碼。
感謝 AWS Support 提供的信息
在相關的 github 問題以及https://github.com/aws-amplify/amplify-category-api/issues/437#issuecomment-1351556948上留言
你只需要跑
使用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.