2017-02-23 6 views
1

Ich möchte in Dynamo DB in mehreren Spalten ohne Verwendung des Partitionsschlüssels suchen.Suchen in Dynamo DB mit AWS

Ich versuche, den Anwendungsfall zu implementieren, wie wir in MySQL haben, wie wir über jede Spalte mit einem Spaltentyp Wert suchen können. Aber, als ich erfuhr, dass der gleiche Anwendungsfall von Dynamo DB nicht erfüllt werden kann.

Gibt es eine Möglichkeit, dies in Dynamo DB zu erreichen.

Jede Hilfe wäre willkommen!

+0

Haben Sie [diese] sehen (http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#QueryAndScan .Query) –

+1

Sie müssen scannen, wenn Sie die Daten ohne den Partitionsschlüssel filtern würden. Siehe http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.NodeJs..04.html#GettingStarted.NodeJs.04.Scan – notionquest

Antwort

0

Sie können beliebige Suchen unterstützen, wenn Sie den Inhalt Ihrer Tabelle mithilfe eines DynamoDB-Streams und einer AWS-Lambda-Funktion indizieren, die Tabellenaktualisierungen an einen AWS ElasticSearch-Cluster schreibt.

0

gemäß Beispiel In AWS Dokument von Local Search Indexes - PHP Low Level API Angesichts

Gültige Vergleiche für den Sortierschlüssel Zustand sind wie folgt:

  • sortKeyName =: sortkeyval - true, wenn der Sortierschlüssel Wert gleich zu: sortkeyval.
  • sortKeyName <: sortkeyval - true, wenn der Sortierschlüsselwert kleiner als: sortkeyval ist.
  • sortKeyName < =: sortkeyval - true, wenn der Wert des Sortierschlüssels kleiner oder gleich ist: sortkeyval.
  • sortKeyName>: sortkeyval - true, wenn der Sortierschlüsselwert größer als: sortkeyval ist.
  • sortKeyName> =: sortkeyval - true, wenn der Sortierschlüsselwert größer oder gleich ist wie: sortkeyval.
  • sortKeyName ZWISCHEN: sortkeyval1 UND: sortkeyval2 - true, wenn der Sortierschlüssel größer oder gleich ist: sortkeyval1 und kleiner als oder gleich: sortkeyval2.
  • begins_with (sortKeyName,: sortkeyval) - true, wenn der Sortierschlüsselwert mit einem bestimmten Operanden beginnt. (Sie können diese Funktion nicht mit einem Sortierschlüssel verwenden, die vom Typ Nummer ist.)

Hinweis, dass der Name der Funktion begins_with ist case-sensitive.

Also nur AND für Bereiche unterstützt. Es gibt kein OR. Sie könnten auch versuchen mit beginnt mit.

Ihr Szenario kann zu folgendem Code umgewandelt werden:

$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' 
]); 
Verwandte Themen