【问题标题】:Searching in Dynamo DB with AWS使用 AWS 在 Dynamodb 中搜索
【发布时间】:2017-04-02 00:21:07
【问题描述】:
我想在不使用分区键的情况下在 Dynamo DB 中搜索多个列。
我正在尝试实现我们在 mysql 中的用例,就像我们可以搜索具有列类型值的任何列一样。但是,据我所知,Dynamo DB 无法满足相同的用例。
有没有办法在 Dynamo DB 中实现这一点。
任何帮助将不胜感激!
【问题讨论】:
标签:
node.js
amazon-web-services
amazon-dynamodb
aws-lambda
【解决方案1】:
如果您使用 DynamoDB 流和将表更新写入 AWS ElasticSearch 集群的 AWS Lambda 函数为表的内容编制索引,则可以支持任意搜索。
【解决方案2】:
根据Local Search Indexes - PHP Low Level API的AWS文档中给出的示例,
排序键条件的有效比较如下:
- sortKeyName = :sortkeyval - 如果排序键值等于 :sortkeyval,则为 true。
- sortKeyName
- sortKeyName
- sortKeyName > :sortkeyval - 如果排序键值大于 :sortkeyval,则为 true。
- sortKeyName >= :sortkeyval - 如果排序键值大于或等于 :sortkeyval,则为 true。
- sortKeyName BETWEEN :sortkeyval1 AND :sortkeyval2 - 如果排序键值大于或等于 :sortkeyval1 且小于则为 true
或等于 :sortkeyval2。
- begins_with (sortKeyName, :sortkeyval ) - 如果排序键值以特定操作数开头,则为 true。 (您不能使用此功能
使用 Number 类型的排序键。)
注意函数名begins_with区分大小写。
因此,范围仅支持 AND。 没有 OR。您也可以尝试使用 begins_with。
您的场景可以转换为以下代码:
$tableName = "genericTable";
$response = $dynamodb->query([
'TableName' => $tableName,
'IndexName' => 'OrderCreationDateIndex',
'KeyConditionExpression' => 'hashkey = :h_key and columnName = :value',
'ExpressionAttributeValues' => [
':h_key' => ['S' => 'foo'],
':value' => ['S' => 'bar']
],
'Select' => 'ALL_PROJECTED_ATTRIBUTES',
'ScanIndexForward' => false,
'ConsistentRead' => true,
'Limit' => 5,
'ReturnConsumedCapacity' => 'TOTAL'
]);