TairVectorは、Tairチームによって開発された拡張データ構造で、ベクターの高性能なリアルタイム保存と検索を提供します。
概要
次の図に示すように、TairVectorは多層ハッシュ構造を使用します。 TairVectorは、階層的ナビゲート可能スモールワールド (HNSW) とフラットサーチの2つのインデックスアルゴリズムを提供します。
HNSW: グラフベースのベクトルインデックスを作成し、非同期メモリ空間の再利用をサポートして、高いクエリ精度を維持しながら、インデックス構造に対するリアルタイムの更新と変更を処理できます。
フラット検索: 完全一致と高速データ挿入を実装します。 このアルゴリズムは、小さなデータセットに適しています。
さらに、TairVectorは、ユークリッド距離、内積、コサイン距離、ジャックカード距離などの複数の距離式をサポートしています。 従来のベクトル検索サービスと比較して、TairVectorには次の利点があります。
すべてのデータをメモリに保存し、リアルタイムのインデックス更新をサポートして、読み取りおよび書き込みのレイテンシを削減します。
メモリ内の最適化されたデータ構造を使用して、ストレージ容量をより有効に活用します。
複雑なモジュールや依存関係のないシンプルで効率的なアーキテクチャで、すぐに使えるデータ構造として機能します。
ベクトル検索と全文検索を組み合わせたハイブリッド検索をサポートします。
タグ属性などのスカラーデータの転置インデックスを作成し、k-nearest neighbor (KNN) 検索機能を提供します。 検索中、TairVectorは最初にスカラー属性に基づいてデータセットをフィルタリングし、次にフィルタリングされた結果のベクトル検索にKNNアルゴリズムを適用します。
リリースノート
TairVectorは、Redis 6.0と互換性のあるTair DRAMベースのインスタンスとともに2022年10月13日にリリースされました。
2022年11月22日のTair6.2.2.0のリリースに伴い、TairVectorへの2つの注目すべき追加は、Jaccard距離式のサポートとTVS.GETINDEXコマンドの拡張です。 このコマンドは、
index_data_size
およびattribute_data_size
パラメーターを使用して、各インデックスのメモリ使用量統計を提供できます。2022年12月26日のTair 6.2.3.0のリリースに伴い、TairVectorへの注目すべき追加には、プロキシモードでのクラスターインスタンスのサポート、FLOAT16データタイプの導入、TVS.MINDEXKNNSEARCHおよびTVS.MINDEXMKNNSEARCHコマンドの追加などがあります。
2023年7月4日のTair6.2.8.2のリリースに伴い、TairVectorへの2つの注目すべき追加は、Cosine距離式のサポートとHNSWインデックスの自動メモリ空間再利用です。
2023年8月3日のTair 23.8.0.0のリリースに伴い、TairVectorは、インデックス内のキーの有効期限 (TTL) を設定できるTVS.HEXPIREATやTVS.HPEXPIREATなどのコマンドを導入し、指定したキーのベクトル最近隣クエリをサポートするTVS.GETDISTANCEコマンドを導入します。 TairVectorは、TVS.CREATEINDEXやTVS.KNNSEARCHなどのコマンドを更新することで、フルテキスト検索に関する機能も強化します。 これらの機能強化により、ベクトル検索と全文検索を組み合わせてハイブリッド検索を実行できます。
2024年6月6日のTair 24.5.1.0のリリースに伴い、TVS.KNNSEARCHFIELDおよびTVS.MINDEXKNNSEARCHFIELDコマンドが追加され、最近隣クエリ中にタグ属性情報を返すことができます。
Tair 24.7.0.0は2024年7月22日にリリースされ、スパースベクトルのHNSWインデックスのサポートが追加されました。
ベストプラクティス
前提条件
インスタンスは、Redis 6.0以降と互換性のあるTair DRAMベースのインスタンスです。 詳細については、「DRAMベースのインスタンス」をご参照ください。
Redis 5.0を実行するDRAMベースのインスタンスは、Redis 6.0を実行するインスタンスにアップグレードすることはできません。 Redis 6.0を実行するDRAMベースのインスタンスを使用するには、インスタンスを作成する必要があります。
注意事項
管理するTairVectorデータは、Tairインスタンスに保存されます。
Redisのハッシュタグを使用して、TairVectorインデックスのキー配布とスロット割り当てを制御することはできません。
TairVectorはMOVEなどの機能をサポートしていません。
ビジネスで高いデータ永続性が必要な場合は、#no_loose_tsync-repl-modeパラメーターをsemisyncに設定して、半同期レプリケーション機能を有効にすることを推奨します。 詳細については、「インスタンスのパラメーターの値の変更」をご参照ください。
サポートされるコマンド
表 1 TairVectorコマンド
タイプ | コマンド | 構文 | 説明 |
ベクトルインデックスの操作 |
| 指定された距離式とアルゴリズムに基づいてベクトルインデックスを作成します。 アルゴリズムは、インデックスの作成とクエリの実行に使用されます。 インデックスは、 | |
| 指定されたベクトルインデックスを照会し、インデックスのメタデータを取得します。 | ||
| 指定されたベクトルインデックスとインデックスのすべてのデータを削除します。 | ||
| Tairインスタンスで特定の条件を満たすベクトルインデックスをスキャンします。 | ||
ベクトルに対する操作 |
| 指定したベクトルインデックスにベクトルを挿入します。 ベクトルがすでに存在する場合、既存のデータは上書きされます。 | |
| 指定したベクターインデックス内の指定したkeyのすべてのデータレコードを照会します。 | ||
| 指定されたベクターインデックスの指定されたkey内の属性keyの値を照会します。 | ||
| keyパラメーターを使用して、指定したベクトルインデックスから指定したベクトルを削除します。 | ||
| 指定されたベクトルの指定された属性を指定されたベクトルインデックスから削除します。 | ||
| 指定したベクターインデックスで特定の条件を満たすキーをスキャンします。 | ||
| 指定されたベクターインデックス内の指定されたキーの指定された属性キーの値を、指定された整数値 (num) だけ増加させます。 | ||
| 指定されたベクトルインデックスの指定されたキーの指定された属性キーの値を、指定された浮動小数点数 (num) だけ増加させます。 | ||
| 指定されたベクトルインデックスの指定されたキーのミリ秒単位の絶対有効期限を指定します。 | ||
| 指定されたベクトルインデックスの指定されたキーのミリ秒単位の相対有効期限を指定します。 | ||
| 指定されたベクトルインデックスの指定されたキーの秒単位の絶対有効期限を指定します。 | ||
| 指定されたベクトルインデックスの指定されたキーの秒単位の相対有効期限を指定します。 | ||
| 指定されたベクトルインデックス内の指定されたキーのTTLを、ミリ秒の精度で照会します。 | ||
| 指定されたベクトルインデックス内の指定されたキーのTTLを2番目まで正確に照会します。 | ||
| 指定されたベクトルインデックス内の指定されたキーの絶対有効期限を、ミリ秒単位で照会します。 | ||
| 指定されたベクトルインデックス内の指定されたキーの絶対有効期限を、2番目まで正確に照会します。 | ||
ベクトル最近傍クエリ |
| 指定されたベクトルインデックス内の指定されたベクトルの最近傍ベクトルを照会します。 最大10,000のベクトルを返すことができます。 | |
| 指定されたベクトルインデックス内の指定されたベクトルの最近傍ベクトルを照会します。 このコマンドの検索ロジックは、TVS.KNNSEARCHと同じですが、検索結果とともにタグ属性を返す機能が追加されています。 | ||
| 指定されたベクトルインデックス内の指定されたキーに対してベクトル最近隣クエリを実行します。 | ||
| 指定されたベクトルインデックス内の指定されたベクトルの最近傍ベクトルを照会します。 | ||
| 複数のベクトルインデックスにわたって、指定されたベクトルの最近傍ベクトルを照会します。 | ||
| 複数のベクトルインデックスにわたって、指定されたベクトルの最近傍ベクトルを照会します。 タグ属性は、検索結果とともに返すことができます。 | ||
| 複数のベクトルインデックスにわたって、指定されたベクトルの最近傍ベクトルを照会します。 |
このトピックで使用されるコマンド構文の規則を次に示します。
Uppercase keyword
: commandキーワードを示します。イタリックテキスト
: 変数を示します。[options]
: 囲まれたパラメータがオプションであることを示します。 括弧で囲まれていないパラメータを指定する必要があります。A | B
: 縦棒 (|) で区切られたパラメータが相互に排他的であることを示します。 指定できるパラメーターは1つだけです。...
: このシンボルの前にあるパラメーターを繰り返し指定できることを示します。
TVS.CREATEINDEX
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | 指定された距離式とアルゴリズムに基づいてベクトルインデックスを作成します。 アルゴリズムは、インデックスの作成とクエリの実行に使用されます。 インデックスは、 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.GETINDEX
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | 指定されたベクトルインデックスを照会し、インデックスのメタデータを取得します。 |
パラメーター |
|
Output |
|
例: | 事前に次のコマンドを実行します。
サンプルコマンド (アルゴリズムパラメータをHNSWに設定):
サンプル出力:
|
TVS.DELINDEX
項目 | 説明 |
構文 |
|
時間の複雑さ | ここで、Nはベクトルインデックス内のキーの数を示す。 |
コマンド説明 | 指定されたベクトルインデックスとインデックスのすべてのデータを削除します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.SCANINDEX
項目 | 説明 |
構文 |
|
時間の複雑さ | ここで、NはTairインスタンス内のベクトルインデックスの数を示す。 |
コマンド説明 | Tairインスタンスで特定の条件を満たすベクトルインデックスをスキャンします。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
サンプル出力 (パターンパラメータを含む):
サンプル出力:
|
TVS.HSET
項目 | 説明 |
構文 |
|
時間の複雑さ | データを挿入または更新する操作がベクトル値の作成または更新を伴わない場合、時間複雑度はO(1) である。 そうでない場合、時間複雑度はO(log(N)) であり、Nはベクトルインデックス内のキーの数を示す。 |
コマンド説明 | 指定したベクトルインデックスにベクトルを挿入します。 ベクトルがすでに存在する場合、既存のデータは上書きされます。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.HGETALL
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | 指定したベクターインデックス内の指定したkeyのすべてのデータレコードを照会します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.HMGET
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | 指定されたベクターインデックスの指定されたkey内の属性keyの値を照会します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.DEL
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | keyパラメーターを使用して、指定したベクトルインデックスから指定したベクトルを削除します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.HDEL
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | 指定されたベクトルの指定された属性を指定されたベクトルインデックスから削除します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS. スキャン
項目 | 説明 |
構文 |
|
時間の複雑さ | ここで、Nはベクトルインデックス内のキーの数を示す。 |
コマンド説明 | 指定したベクターインデックスで特定の条件を満たすキーをスキャンします。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS. ヒンクルビー
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | 指定されたベクターインデックス内の指定されたキーの指定された属性キーの値を、指定された整数値 (num) だけ増加させます。 指定された属性キーが存在しない場合、属性キーは自動的に作成され、指定されたnum値が割り当てられます。 属性キーが既に存在する場合、TairVectorは、指定されたnum値を既存の値に追加することによって属性キーの値を更新します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.HINCRBYFLOAT
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | 指定されたベクトルインデックスの指定されたキーの指定された属性キーの値を、指定された浮動小数点数 (num) だけ増加させます。 指定された属性キーが存在しない場合、属性キーは自動的に作成され、指定されたnum値が割り当てられます。 属性キーが既に存在する場合、TairVectorは、指定されたnum値を既存の値に追加することによって属性キーの値を更新します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.HPEXPIREAT
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | 指定されたベクトルインデックスの指定されたキーのミリ秒単位の絶対有効期限を指定します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.HPEXPIRE
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | 指定されたベクトルインデックスの指定されたキーのミリ秒単位の相対有効期限を指定します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.HEXPIREAT
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | 指定されたベクトルインデックスの指定されたキーの秒単位の絶対有効期限を指定します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.HEXPIRE
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | 指定されたベクトルインデックスの指定されたキーの秒単位の相対有効期限を指定します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.HPTTL
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | 指定されたベクトルインデックス内の指定されたキーのTTLを、ミリ秒の精度で照会します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.HTTL
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | 指定されたベクトルインデックス内の指定されたキーのTTLを2番目まで正確に照会します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.HPEXPIRETIME
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | 指定されたベクトルインデックス内の指定されたキーの絶対有効期限を、ミリ秒単位で照会します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.HEXPIRETIME
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | 指定されたベクトルインデックス内の指定されたキーの絶対有効期限を、2番目まで正確に照会します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.KNNSEARCH
項目 | 説明 |
構文 |
|
時間の複雑さ |
Nは、ベクトルインデックス内のキーの数を示す。 |
コマンド説明 | 指定されたベクトルインデックス内の指定されたベクトルの最近傍ベクトルを照会します。 最大10,000のベクトルを返すことができます。 |
パラメーター |
|
Output |
|
例: | 事前に次のコマンドを実行します。
サンプルコマンド1:
サンプル出力1:
サンプルコマンド2:
サンプル出力2:
|
TVS.KNNSEARCHFIELD
項目 | 説明 |
構文 |
|
時間の複雑さ |
Nは、ベクトルインデックス内のキーの数を示す。 |
コマンド説明 | 指定されたベクトルインデックス内の指定されたベクトルの最近傍ベクトルを照会します。 このコマンドの検索ロジックは、TVS.KNNSEARCHと同じですが、検索結果とともにタグ属性を返す機能が追加されています。 |
パラメーター |
|
Output |
|
例: | 事前に次のコマンドを実行します。
サンプルコマンド:
サンプル出力:
|
TVS.GETDISTANCE
項目 | 説明 |
構文 |
|
時間の複雑さ |
Nは、ベクトルインデックス内のキーの数を示す。 |
コマンド説明 | 指定されたベクトルインデックス内の指定されたキーに対してベクトル最近隣クエリを実行します。 |
パラメーター |
|
Output |
|
例: | 事前に次のコマンドを実行します。
サンプルコマンド:
サンプル出力:
|
TVS.MKNNSEARCH
項目 | 説明 |
構文 |
|
時間の複雑さ |
Nは、ベクトルインデックス内のキーの数を示す。 |
コマンド説明 | 指定されたベクトルインデックス内の指定されたベクトルの最近傍ベクトルを照会します。 |
パラメーター |
|
Output |
|
例: | 事前に次のコマンドを実行します。
サンプルコマンド:
サンプル出力:
|
TVS.MINDEXKNNSEARCH
項目 | 説明 |
構文 |
|
時間の複雑さ |
Nは、ベクトルインデックス内のキーの数を示す。 |
コマンド説明 | 複数のベクトルインデックスにわたって、指定されたベクトルの最近傍ベクトルを照会します。 |
パラメーター |
|
Output |
|
例: | 事前に次のコマンドを実行します。
サンプルコマンド:
サンプル出力:
|
TVS.MINDEXKNNSEARCHFIELD
項目 | 説明 |
構文 |
|
時間の複雑さ |
Nは、ベクトルインデックス内のキーの数を示す。 |
コマンド説明 | 複数のベクトルインデックスにわたって、指定されたベクトルの最近傍ベクトルを照会します。 タグ属性は、検索結果とともに返すことができます。 |
パラメーター |
|
Output |
|
例: | 事前に次のコマンドを実行します。
サンプルコマンド:
サンプル出力:
|
TVS.MINDEXMKNNSEARCH
項目 | 説明 |
構文 |
|
時間の複雑さ |
Nは、ベクトルインデックス内のキーの数を示す。 |
コマンド説明 | 複数のベクトルインデックスにわたって、指定されたベクトルの最近傍ベクトルを照会します。 |
パラメーター |
|
Output |
|
例: | 事前に次のコマンドを実行します。
サンプルコマンド:
サンプル出力:
|