0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DynamoDBで部分一致検索をする

Posted at

現在作成中の検索サービスで、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を抽出できます。

image.png

以上、DynamoDBで部分一致検索をする方法でした。
引き続き、DynamoDBの使いかたについて勉強していきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?