DynamoDBで前方一致検索を実施する
はじめに
便利で何より安いけど何かと検索についてはあんまり使い勝手の良くないDynamoDBちゃん。今日はそれで前方一致検索をする方法を考えたのでまとめておきたいと思います。事前に言っておきますがScanを使うので使いすぎにはご注意。
最初に実際にLambdaにぶち込んだソースコードを
lambda_function.py
import json
import boto3
from boto3.dynamodb.conditions import Attr
def lambda_handler(event, context):
dynamoDB = boto3.resource("dynamodb")
table = dynamoDB.Table(event["type"])
title = event["title"]
fin = title[0]+chr(ord(title[1])+2)
queryData = table.scan(
FilterExpression = Attr("Title").between(title,fin)
)
return queryData
なにをしてるのか?
import json
import boto3
from boto3.dynamodb.conditions import Attr
def lambda_handler(event, context):
dynamoDB = boto3.resource("dynamodb")
table = dynamoDB.Table(event["type"])
title = event["title"]
fin = title[0]+chr(ord(title[1])+2)
queryData = table.scan(
FilterExpression = Attr("Title").between(title,fin)
)
return queryData
これはようするに入力された文字列と入力された文字列の2文字目を2つずらした文字列を用意してその間を取得しています。
今回、テストに使った日向坂46の「キュン」という曲の場合はまず「キュン」という文字列から「キョ」という文字列を作ります。
それが次の部分となります。
fin = title[0]+chr(ord(title[1])+2)
あとは普通にscanで差分を取るだけです。ちなみに「キュン」の場合は次のようになります。
「キュン」から「キョ」の間なので「キュー」で始まる曲が混じってますがそれはご愛敬という事でお願いします。
最後に
DynamoDBのscanは全件取得してから目当てのデータを絞り込むため、滅茶苦茶苦重いです。特に頻繁に叩かれる事が想定できる場合は素直にRDSを契約しましょう。ぼくはピンチケ開発者なのでまだしばらくDynamoDBで頑張ろうと思います。
Author And Source
この問題について(DynamoDBで前方一致検索を実施する), 我々は、より多くの情報をここで見つけました https://qiita.com/sasakirione/items/6d4969cec4aa294896a2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .