我想在不使用分区键的情况下在多列上搜索Dynamo DB。
我正在尝试像在mysql中一样实现用例,就像我们可以搜索具有列类型值的任何列一样。但是,正如我所知,Dynamo DB不能满足相同的用例。
有没有办法在Dynamo DB中实现这一目标。
任何帮助将不胜感激!
答案 0 :(得分:0)
如果使用DynamoDB Stream和将表更新写入AWS ElasticSearch集群的AWS Lambda函数索引表的内容,则可以支持任意搜索。
答案 1 :(得分:0)
根据Local Search Indexes - PHP Low Level API的AWS文档中给出的示例,
排序键条件的有效比较如下:
- sortKeyName =:sortkeyval - 如果排序键值等于:sortkeyval,则为true。
- sortKeyName< :sortkeyval - 如果排序键值小于:sortkeyval。
,则为true- sortKeyName< =:sortkeyval - 如果排序键值小于或等于,则为true:sortkeyval。
- sortKeyName> :sortkeyval - 如果排序键值大于:sortkeyval。
,则为true- sortKeyName> =:sortkeyval - 如果排序键值大于或等于:sortkeyval,则为true。
- sortKeyName BETWEEN:sortkeyval1 AND:sortkeyval2 - 如果排序键值大于或等于:sortkeyval1且小于 或等于:sortkeyval2。
- starts_with(sortKeyName,:sortkeyval) - 如果排序键值以特定操作数开头,则为true。 (你不能使用这个功能 使用Number类型的排序键。)
注意,函数名称starts_with区分大小写。
因此,范围仅支持 AND 。 没有OR 。您也可以尝试使用 starts_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'
]);