現在作成中の検索サービスで、DynamoDBをデータベースとして使用しています。
DynamoDBに関しては初学者ですが、デメリットがあるようなのですが部分一致にやり方について、デモを交えながら解説します。
サンプルデータを作成する
AWSのドキュメントを参考に、DynamoDBにテーブルとデータを作成します。
今回はLinux上でAWS CLIを使いました。CLIの設定をしていない方は、マネジメントコンソールからテーブルの作成をお願いします。
aws dynamodb create-table \
--table-name Music \
--attribute-definitions \
AttributeName=Artist,AttributeType=S \
AttributeName=SongTitle,AttributeType=S \
--key-schema \
AttributeName=Artist,KeyType=HASH \
AttributeName=SongTitle,KeyType=RANGE \
--provisioned-throughput \
ReadCapacityUnits=5,WriteCapacityUnits=5 \
--table-class STANDARD
次に必要なデータを作成します。
aws dynamodb put-item \
--table-name Music \
--item \
'{"Artist": {"S": "No One You Know"}, "SongTitle": {"S": "Call Me Today"}, "AlbumTitle": {"S": "Somewhat Famous"}, "Awards": {"N": "1"}}'
aws dynamodb put-item \
--table-name Music \
--item \
'{"Artist": {"S": "No One You Know"}, "SongTitle": {"S": "Howdy"}, "AlbumTitle": {"S": "Somewhat Famous"}, "Awards": {"N": "2"}}'
aws dynamodb put-item \
--table-name Music \
--item \
'{"Artist": {"S": "Acme Band"}, "SongTitle": {"S": "Happy Day"}, "AlbumTitle": {"S": "Songs About Life"}, "Awards": {"N": "10"}}'
aws dynamodb put-item \
--table-name Music \
--item \
'{"Artist": {"S": "Acme Band"}, "SongTitle": {"S": "PartiQL Rocks"}, "AlbumTitle": {"S": "Another Album Title"}, "Awards": {"N": "8"}}'
以上で、データの下準備は完了です。
AWS CLIで部分一致のスキャンを実行する
以下のコマンドで、例えばAlbumTitleにwhatを含むItemを抽出することが出来ます。
--fiter-expressionの:AlbumTitleはプレースホルダーを使っています。この値は、--expression-attribute-valuesで定義しています。
aws dynamodb scan --table-name Music \
--filter-expression 'contains(AlbumTitle,:AlbumTitle)' \
--expression-attribute-values '{":AlbumTitle":{"S":"what"}}'
実行結果
{
"Items": [
{
"AlbumTitle": {
"S": "Somewhat Famous"
},
"Awards": {
"N": "1"
},
"Artist": {
"S": "No One You Know"
},
"SongTitle": {
"S": "Call Me Today"
}
},
{
"AlbumTitle": {
"S": "Somewhat Famous"
},
"Awards": {
"N": "2"
},
"Artist": {
"S": "No One You Know"
},
"SongTitle": {
"S": "Howdy"
}
}
],
"Count": 2,
"ScannedCount": 4,
"ConsumedCapacity": null
}
マネジメントコンソール上で部分一致のスキャンを実行する
「項目を探索」で、Musicテーブルに対して、スキャンタブを選択します。
フィルター項目で、属性名にAlbumTitle、タイプに文字列、条件に次を含む、値にwhatを入力して、実行すると、下記画像のようにItemを抽出できます。
以上、DynamoDBで部分一致検索をする方法でした。
引き続き、DynamoDBの使いかたについて勉強していきます。