2017-02-23 28 views
1

我想在Dynamo DB中搜索多列而不使用分區鍵。使用AWS在Dynamo DB中搜索

我想實現用例,因爲我們有在MySQL一樣,我們可以用列類型值的任何列搜索結束。但是,因爲我知道Dynamo DB無法滿足相同的用例。

,有沒有辦法在迪納摩DB來實現這一目標。

任何幫助,將不勝感激!

+0

你看着[這](http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#QueryAndScan .Query) –

+1

您需要掃描是否要在不使用分區鍵的情況下過濾數據。請參閱http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.NodeJs.04.html#GettingStarted.NodeJs.04.Scan – notionquest

回答

0

可以支持任意的搜索,如果你指數使用DynamoDB流和寫入表更新到AWS ElasticSearch集羣的AWS lambda表達式的表的內容。

0

按照實施例給出的Local Search Indexes - PHP Low Level API AWS文獻,

用於排序關鍵條件有效的比較如下:

  • sortKeyName =:sortkeyval - 如果排序鍵的值等於到:sortkeyval。
  • sortKeyName <:sortkeyval - 真,如果排序關鍵字值小於:sortkeyval。
  • sortKeyName < =:sortkeyval - 如果排序鍵的值小於或等於:sortkeyval。
  • sortKeyName>:sortkeyval - 如果排序關鍵字值大於:sortkeyval,則返回true。
  • sortKeyName> =:sortkeyval - 如果排序關鍵字值大於或等於:sortkeyval,則爲true。
  • sortKeyName BETWEEN:sortkeyval1 AND:sortkeyval2 - 如果排序關鍵字值大於或等於:sortkeyval1且小於 或等於sortkeyval2,則爲true。
  • BEGINS_WITH(sortKeyName,:sortkeyval) - 如果排序關鍵字值與特定的操作數開始真。 (您不能使用此功能 與是Number類型排序關鍵字。)

注意,函數名BEGINS_WITH是區分大小寫的。

所以,只有支持範圍。 沒有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' 
]);