【问题标题】: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'
    ]);
    

    【讨论】:

      猜你喜欢
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多