ベクトルのインデックス登録

このページでは、ベクトルをハッシュに格納する方法について説明します。ハッシュは、ベクトルを Redis に格納する効率的な方法を提供します。

データのシリアル化

Redis ハッシュにベクトルを保存する前に、Redis が認識できる形式にベクトルを変換する必要があります。それには、データ型のバイトサイズ(たとえば FLOAT32 の場合は 4)にベクトルの次元数を掛けたものと等しいサイズのバイナリ ブロブにベクトルをシリアル化する必要があります。数値ベクトルには、Python の NumPy ライブラリがよく使用されます。

Redis への接続

ベクトルをハッシュに保存する前に、redis-py などのクライアントを使用して Redis インスタンスへの接続を確立します。

ベクトルをハッシュに格納する

Redis ハッシュは、Key-Value ペアを含む辞書のようなものです。Redis の HSET コマンドを使用して、シリアル化されたベクトルを格納します。

import numpy as np
import redis

# Sample vector
vector = np.array([1.2, 3.5, -0.8], dtype=np.float32) # 3-dimensional vector

# Serialize to a binary blob
serialized_vector = vector.tobytes()

redis_client = redis.Redis(host='your_redis_host', port=6379)

redis_client.hset('vector_storage', 'vector_key', serialized_vector)  # 'vector_key' is a unique identifier
  • インデックス登録を正常に行うには、ベクトルデータがインデックス スキーマで設定されたディメンションとデータ型に準拠している必要があります。

インデックスのバックフィル

インデックスのバックフィルは、次のいずれかのシナリオで発生する可能性があります。

  • インデックスが作成されると、バックフィル手順に沿って Redis キースペースがスキャンされ、インデックス フィルタの条件を満たすエントリが検索されます。
  • ベクトル インデックスとそのデータは、RDB スナップショットに保持されています。RDB ファイルが読み込まれると、インデックスの自動バックフィル プロセスがトリガーされます。このプロセスでは、RDB スナップショットの作成以降に新規作成されたエントリまたは変更されたエントリを積極的に検出し、インデックスに統合して、インデックスの整合性を維持するとともに現在の結果を確保します。