Redis Vector Database
Redis を向量データベースとして使用する設定と方法について、向量モデリング、インデックス作成、検索設定を解説します。
環境設定
Python で向量 embedding 計算を行うには、以下のパッケージが必要です:
python -m venv redisvenv
source ./redisvenv/bin/activate
pip install sentence_transformers
pip install imgbeddings初回実行時に embedding モデル all-MiniLM-L6-v2 がダウンロードされます。
向量モデリング

向量は Redis で文字列として保存され、向量をシリアライズして適切なデータ構造に格納します。
String での保存
最も簡単な方法は、カンマ区切りの文字列で保存することです:
SET vec "0.00555776,0.06124274,-0.05503812,-0.08395513,-0.09052192,-0.01091553,-0.06539601,0.01099653,-0.07732834,0.0536432"Hash での保存
向量は Hash 内でバイナリ blob として保存されます:
{
"content": "Understanding vector search is easy, but understanding all the mathematics behind a vector is not!",
"genre": "technical",
"embedding": "..."
}JSON での保存
RedisJSON モジュールを使用すると、ドキュメントと向量を JSON 形式で直接保存できます。
向量インデックスの作成
FT.CREATE コマンドで向量インデックスを作成します。Hash と JSON の両方のデータ構造に対応しています。
Hash インデックス
FT.CREATE doc_idx ON HASH PREFIX 1 doc: SCHEMA content AS content TEXT genre AS genre TAG embedding VECTOR HNSW 6 TYPE FLOAT32 DIM 384 DISTANCE_METRIC COSINEJSON インデックス
FT.CREATE doc_idx ON JSON PREFIX 2 doc: SCHEMA $.content AS content TEXT $.genre AS genre TAG $.embedding VECTOR HNSW 6 TYPE FLOAT32 DIM 384 DISTANCE_METRIC COSINEインデックスパラメータ
| パラメータ | 説明 | 例 |
|---|---|---|
DIM | 向量の次元数(embedding モデルにより決定) | 384(all-MiniLM-L6-v2) |
TYPE | 向量データ型 | FLOAT32 |
DISTANCE_METRIC | 距離計算方法 | COSINE、L2、IP |
HNSW / FLAT | インデックス方法 | データ量により選択 |
インデックス方法
FLAT
小規模データセットに適しています。
- テスト向量をインデックス内のすべての向量と一つずつ比較
- 結果は最も正確だが、速度が遅く計算負荷が高い
HNSW (Hierarchical Navigable Small World)
大規模データセットに適しています。
- HNSW アルゴリズムを使用した確率的アプローチ
- 検索速度が速いが、精度を犠牲にしてパフォーマンスを向上
距離計算
コサイン距離(cosine distance)はコサイン類似度の補数で、1 - cosine_similarity で計算できます:
詳細な距離計算方法は Semantic Search を参照してください。
応用シナリオ
- テキスト推薦システム - テキスト内容の類似度に基づく推薦
- 画像検索 - imgbeddings で画像を向量に変換
- RAG システム - LLM と組み合わせた検索拡張生成