Redisにおける複数条件の複合クエリの実現方法
Redisはキーバリューストアデータベースとして主に利用されているため、組み込みで複数の条件を組み合わせてクエリする機能は提供されていません。しかし、工夫やデータ構造を併用することで、似たような機能を実現することができます。
フィールドの値をスコアとしたソート済みセットに検索したいフィールドを保管しておき、フィールドの名称をメンバーとして保管する方法がよく使われます。ZINTERSTOREコマンドで複数の条件の積集合を算出して、ZRANGEBYSCOREコマンドで条件を満たしたメンバーを取得することができます。
たとえば、ユーザーデータがあり、各ユーザーに名前と年齢のフィールドがあるとします。 2つの並べ替えセットを作成できます。1つは名前を格納するため、もう1つは年齢を格納するためです。ユーザー1の名前が「John」で年齢が25歳、ユーザー2の名前が「Jane」で年齢が30歳だとすると、次のコマンドを実行してデータを格納できます。
ZADD names 25 "John"
ZADD names 30 "Jane"
ZADD ages 25 "John"
ZADD ages 30 "Jane"
次に、ZINTERSTORE コマンドを使用して、複数の条件を満たす交集合を計算できます。例えば、名前が「John」で、年齢が 25 のユーザーを取得したい場合には、以下のコマンドを実行できます。
ZINTERSTORE result 2 names ages WEIGHTS 1 1 AGGREGATE MIN
ZRANGEBYSCORE result 25 25
条件に適したメンバーを取得できます。
大量データでは、処理速度に影響が出る可能性がある点と、等価検索しか機能せず範囲検索には非対応であることに注意してください。より複雑な検索機能が必要な場合は他のデータベースや検索エンジンの利用を検討することをお勧めします。