すべてのプロダクト
Search
ドキュメントセンター

Tair (Redis® OSS-Compatible):ベクター

最終更新日:Nov 09, 2025

Tair が開発した拡張データ構造である TairVector は、高性能なベクターのリアルタイムストレージと取得を提供します。

概要

TairVector は、次の図に示すように、多層ハッシュ構造を使用します。TairVector数据结构TairVector は、階層的なナビゲート可能なスモールワールド (HNSW) とフラット検索という 2 つのインデックス作成アルゴリズムを提供します。

  • HNSW: グラフベースのベクターインデックスを作成し、非同期のメモリ領域の再利用をサポートして、高いクエリ精度を維持しながら、インデックス構造へのリアルタイムの更新や変更を処理できます。

  • フラット検索: 完全一致と高速なデータ挿入を実装します。このアルゴリズムは、小規模なデータセットに適しています。

さらに、TairVector は、ユークリッド距離、内積、コサイン距離、ジャカード距離など、複数の距離計算式をサポートしています。従来のベクター取得サービスと比較して、TairVector には次の利点があります。

  • すべてのデータをメモリに格納し、リアルタイムのインデックス更新をサポートして、読み取りおよび書き込みレイテンシーを削減します。

  • メモリ内で最適化されたデータ構造を使用して、ストレージ容量をより有効に活用します。

  • 複雑なモジュールや依存関係なしに、シンプルで効率的なアーキテクチャですぐに使えるデータ構造として機能します。

  • ベクトル検索とフルテキスト検索を組み合わせたハイブリッド検索をサポートします。

  • タグ属性などのスカラーデータの転置インデックスを作成し、k-最近傍 (KNN) 検索機能を提供できます。取得中、TairVector はまずスカラー属性に基づいてデータセットをフィルターし、次にフィルターされた結果に KNN アルゴリズムを適用してベクトル検索を実行します。

リリースノート

  1. TairVector は 2022 年 10 月 13 日に、Redis 6.0 と互換性のある Tair DRAM ベースのインスタンスとともにリリースされました。

  2. 2022 年 11 月 22 日の Tair 6.2.2.0 のリリースに伴い、TairVector にはジャカード距離計算式のサポートと TVS.GETINDEX コマンドの強化という 2 つの注目すべき追加が行われました。このコマンドは、index_data_size および attribute_data_size パラメーターを使用して、各インデックスのメモリ使用量統計を提供できます。

  3. 2022 年 12 月 26 日の Tair 6.2.3.0 のリリースに伴い、TairVector には、プロキシモードのクラスターインスタンスのサポート、FLOAT16 データ型の導入、TVS.MINDEXKNNSEARCH および TVS.MINDEXMKNNSEARCH コマンドの追加などの注目すべき追加が行われました。

  4. 2023 年 7 月 4 日の Tair 6.2.8.2 のリリースに伴い、TairVector にはコサイン距離計算式のサポートと HNSW インデックスの自動メモリ領域再利用という 2 つの注目すべき追加が行われました。

  5. 2023 年 8 月 3 日の Tair 23.8.0.0 のリリースに伴い、TairVector は、インデックス内の キー の生存時間 (TTL) を設定できる TVS.HEXPIREATTVS.HPEXPIREAT などのコマンドを導入し、指定されたキーに対するベクトル最近傍クエリをサポートする TVS.GETDISTANCE コマンドを導入しました。TairVector はまた、TVS.CREATEINDEXTVS.KNNSEARCH などのコマンドを更新することで、フルテキスト検索に関する機能を強化しました。これらの強化により、ベクトル検索とフルテキスト検索を組み合わせてハイブリッド検索を実行できます。

  6. 2024 年 6 月 6 日の Tair 24.5.1.0 のリリースに伴い、TVS.KNNSEARCHFIELD および TVS.MINDEXKNNSEARCHFIELD コマンドが追加され、最近傍クエリ中にタグ属性情報を返すことができるようになりました。

  7. 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 などの機能をサポートしていません。

  • ビジネスで高いデータの永続性が必要な場合は、準同期レプリケーションモードを有効にすることをお勧めします。

コマンド一覧

表 1. TairVector コマンド

タイプ

コマンド

構文

説明

ベクターインデックス操作

TVS.CREATEINDEX

TVS.CREATEINDEX index_name dims algorithm distance_method [algo_param_key alog_param_value] ...

指定された距離計算式とアルゴリズムに基づいてベクターインデックスを作成します。アルゴリズムは、インデックスの作成とクエリの実行に使用されます。インデックスは、TVS.DELINDEX コマンドを実行することによってのみ削除できます。

TVS.GETINDEX

TVS.GETINDEX index_name

指定されたベクターインデックスをクエリし、インデックスのメタデータを取得します。

TVS.DELINDEX

TVS.DELINDEX index_name

指定されたベクターインデックスと、そのインデックスのすべてのデータを削除します。

TVS.SCANINDEX

TVS.SCANINDEX cursor [MATCH pattern] [COUNT count]

Tair インスタンス内で特定の基準を満たすベクターインデックスをスキャンします。

ベクターデータ操作

TVS.HSET

TVS.HSET index_name key attribute_key attribute_value [attribute_key attribute_value] ...

データレコード (key) をベクターインデックスに挿入します。レコードが既に存在する場合、既存のレコードは上書きされます。

TVS.HGETALL

TVS.HGETALL index_name key

指定されたベクターインデックス内の指定された key のすべてのデータレコードをクエリします。

TVS.HMGET

TVS.HMGET index_name key attribute_key [attribute_key ...]

指定されたベクターインデックスの指定された key 内の attribute keys の値をクエリします。

TVS.DEL

TVS.DEL index_name key [key ...]

key パラメーターを使用して、指定されたベクターインデックスから指定されたベクターを削除します。

TVS.HDEL

TVS.HDEL index_name key attribute_key [attribute_key ...]

ベクターインデックス内のデータレコード (key) から、指定された attribute_key とその値を削除します。

TVS.SCAN

TVS.SCAN index_name cursor [MATCH pattern] [COUNT count] [FILTER filter_string] [VECTOR vector] [MAX_DIST max_distance]

指定されたベクターインデックス内で特定の基準を満たす keys をスキャンします。

TVS.HINCRBY

TVS.HINCRBY index_name key attribute_key num

指定されたベクターインデックス内の指定された key の指定された属性キーの値を、指定された整数値 (num) だけ増やします。

TVS.HINCRBYFLOAT

TVS.HINCRBYFLOAT index_name key attribute_key num

指定されたベクターインデックス内の指定された key の指定された属性キーの値を、指定された浮動小数点数 (num) だけ増やします。

TVS.HPEXPIREAT

TVS.HPEXPIREAT index_name key milliseconds-timestamp

指定されたベクターインデックス内の指定された key に対して、ミリ秒単位で正確な絶対有効期限時刻を指定します。

TVS.HPEXPIRE

TVS.HPEXPIRE index_name key milliseconds-timestamp

指定されたベクターインデックス内の指定された key に対して、ミリ秒単位で正確な相対有効期限時刻を指定します。

TVS.HEXPIREAT

TVS.HEXPIREAT index_name key timestamp

指定されたベクターインデックス内の指定された key に対して、秒単位で正確な絶対有効期限時刻を指定します。

TVS.HEXPIRE

TVS.HEXPIRE index_name key timestamp

指定されたベクターインデックス内の指定された key に対して、秒単位で正確な相対有効期限時刻を指定します。

TVS.HPTTL

TVS.HPTTL index_name key

指定されたベクターインデックス内の指定された key の TTL をミリ秒単位で正確にクエリします。

TVS.HTTL

TVS.HTTL index_name key

指定されたベクターインデックス内の指定された key の TTL を秒単位で正確にクエリします。

TVS.HPEXPIRETIME

TVS.HPEXPIRETIME index_name key

指定されたベクターインデックス内の指定された key の絶対有効期限時刻をミリ秒単位で正確にクエリします。

TVS.HEXPIRETIME

TVS.HEXPIRETIME index_name key

指定されたベクターインデックス内の指定された key の絶対有効期限時刻を秒単位で正確にクエリします。

ベクトル最近傍クエリ

TVS.KNNSEARCH

TVS.KNNSEARCH index_name topN vector [filter_string] [param_key param_value]

指定されたベクターインデックス内で、指定されたベクターの最近傍ベクターをクエリします。最大 topN 個のベクターを返すことができます。

TVS.KNNSEARCHFIELD

TVS.KNNSEARCHFIELD index_name topN vector field_count field_name [field_name ...] [filter_string] [param_key param_value]

指定されたベクターインデックス内で、指定されたベクターの最近傍ベクターをクエリします。このコマンドの検索ロジックは TVS.KNNSEARCH と同じですが、検索結果とともにタグ属性を返す機能が追加されています。

TVS.GETDISTANCE

TVS.GETDISTANCE index_name vector key_count key [key, ...] [TOPN topN] [FILTER filter_string] [MAX_DIST max_distance]

指定されたベクターインデックス内で、指定されたキーに対してベクトル最近傍クエリを実行します。

TVS.MKNNSEARCH

TVS.MKNNSEARCH index_name topN vector_count vector [vector ...] [filter_string] [param_key param_value]

指定されたベクターインデックス内で、指定された複数のベクターの最近傍ベクターをクエリします。

TVS.MINDEXKNNSEARCH

TVS.MINDEXKNNSEARCH index_count index_name [index_name ...] topN vector [filter_string] [param_key param_value]

複数のベクターインデックスにまたがって、指定されたベクターの最近傍ベクターをクエリします。

TVS.MINDEXKNNSEARCHFIELD

TVS.MINDEXKNNSEARCHFIELD index_count index_name [index_name ...] topN vector field_count field_name [field_name ...] [filter_string] [param_key param_value]

複数のベクターインデックスにまたがって、指定されたベクターの最近傍ベクターをクエリします。検索結果とともにタグ属性を返すことができます。

TVS.MINDEXMKNNSEARCH

TVS.MINDEXMKNNSEARCH index_count index_name [index_name ...] topN vector_count vector [vector ...] [filter_string] [param_key param_value]

複数のベクターインデックスにまたがって、指定された複数のベクターの最近傍ベクターをクエリします。

一般

DEL

DEL key [key ...]

ネイティブの Redis DEL コマンドを使用して、1 つ以上の TairVector データ項目を削除できます。

説明

次のリストは、このトピックで使用されるコマンド構文の規則について説明しています。

  • 大文字のキーワード: コマンドキーワードを示します。

  • 斜体のテキスト: 変数を示します。

  • [options]: 角括弧で囲まれたパラメーターはオプションであることを示します。角括弧で囲まれていないパラメーターは指定する必要があります。

  • A|B: 縦棒 (|) で区切られたパラメーターは相互に排他的であることを示します。パラメーターのいずれか 1 つのみを指定できます。

  • ...: この記号の前のパラメーターは繰り返し指定できることを示します。

TVS.CREATEINDEX

項目

説明

構文

TVS.CREATEINDEX index_name dims algorithm distance_method [algo_param_key alog_param_value] ...

時間計算量

O(1)

コマンドの説明

指定された距離計算式とアルゴリズムに基づいてベクターインデックスを作成します。アルゴリズムは、インデックスの作成とクエリの実行に使用されます。インデックスは、TVS.DELINDEX コマンドを実行することによってのみ削除できます。

パラメーター

  • index_name: ベクターインデックスの名前。

  • dims: ベクターのディメンション。インデックスに挿入されるベクターは、同じディメンションを持つ必要があります。有効な値: 1~32768。

  • algorithm: インデックスの作成とクエリの実行に使用されるアルゴリズム。有効な値:

    • FLAT: インデックスを作成せずにベクターを検索するために Flat Search アルゴリズムを使用します。このアルゴリズムは、10,000 レコード未満を含むデータセットに適しています。

    • HNSW: HNSW グラフを使用してインデックスを作成し、HNSW アルゴリズムを使用してベクターを検索します。このアルゴリズムは、大規模なデータセットに適しています。

  • distance_method: 2 つのベクター間の距離を計算するために使用されるメソッド。有効な値:

    • L2: 2 つのベクター間のユークリッド距離の 2 乗。

    • IP: 2 つのベクターの内積。次の数式を使用して 2 つのベクター間の距離を計算できます: 1 - 2 つのベクターの内積

    • COSINE: 2 つのベクター間のコサイン距離。次の数式を使用して 2 つのベクター間の距離を計算できます: 1 - 2 つのベクター間の角度のコサイン。このメソッドには、書き込まれたベクターを単位ベクターに変換することが含まれ、これは L2 正規化として知られています。したがって、ベクターの結果は元のベクター値と同じではない場合があります。

    • JACCARD: 2 つのベクター間のジャカード距離。次の数式を使用して 2 つのベクター間のジャカード距離を計算できます: 1 - ジャカード係数。このパラメーターを JACCARD に設定する場合は、data_type パラメーターを BINARY に設定する必要があります。

  • algo_param_key および alog_param_value:

    • data_type: (密) ベクターのデータ型。有効な値:

      • FLOAT32 (デフォルト): 4 バイトの単精度浮動小数点数。

      • FLOAT16: IEEE 754-2008 規格に準拠した 2 バイトの半精度浮動小数点数。このデータ型はベクターのストレージ使用量を削減しますが、データの精度を損ないます。有効な値: -65519~65519。

      • BINARY: 0 と 1 のみを含むことができるバイナリベクターで、ジャカード距離計算式のみをサポートします。

    • HNSW インデックス固有のパラメーター:

      • ef_construct: HNSW アルゴリズムを使用してベクターインデックスを作成する場合の動的配列の長さ。デフォルト値: 100。有効な値: 1~1000。値が大きいほど、近似最近傍 (ANN) 検索の精度が高くなります。これにより、パフォーマンスのオーバーヘッドが高くなります。

      • M: グラフインデックス構造の各レイヤーにおける最大送信ネイバー数。デフォルト値: 16。有効な値: 1~100。値が大きいほど、ANN 検索の精度が高くなります。これにより、パフォーマンスのオーバーヘッドが高くなります。

      • auto_gc: インデックスの自動メモリ領域再利用を有効にするかどうかを指定します。有効な値: false (デフォルト、機能が無効であることを示します) および true (機能が有効であることを示します)。このパラメーターは、マイナーバージョンが 6.2.8.2 以降の Tair インスタンスでのみ使用できます。HNSW インデックスは、マーク付き削除メソッドを使用してベクターを削除します。この機能を有効にすると、インデックスは自動的にメモリ領域を再利用し、メモリ使用量を削減するのに役立ちます。ただし、この機能は最近傍クエリのインデックスパフォーマンスに影響を与える可能性があります。したがって、メモリ使用量が懸念され、最近傍クエリのパフォーマンス低下が許容できるシナリオでのみ、この機能を有効にすることをお勧めします。

    • HybridIndex (ハイブリッドインデックス) 固有のパラメーター:

      • 特定のタグフィールドの転置インデックスを作成する場合は、事前にフィールド名と対応するデータ型を指定する必要があります。

        inverted_index_<field_name> int|long|float|double|string 構文は、field_name で指定されたフィールドの転置インデックスを作成するために使用されます。サポートされているデータ型は INT、LONG、FlOAT、DOUBLE、STRING です。フィールド名と対応するデータ型は小文字である必要があります。

        たとえば、STRING 型の productname というフィールドに転置インデックスを作成する場合、構文は inverted_index_productname string です。

      • lexical_algorithm: フルテキスト検索アルゴリズム。有効な値:

        • bm25: Okapi BM25 アルゴリズム。元のテキストを渡して、Tair ベクターサービスを使用してインデックスを作成できます。

        • vector: 疎ベクトルに適したベクトルアルゴリズム。

          元のテキストを疎ベクトルにエンコードし、ベクトルアルゴリズムへの入力として提供する必要があります。入力を "[[2,0.221],[42,09688],...]" 形式で指定します。Key フィールドはインデックスを指定し、uint32_t 型である必要があり、Value フィールドは字句頻度プロファイルを指定し、FLOAT 型である必要があります。

      • lexical_algorithm パラメーターを bm25 に設定した場合、さらに次のパラメーターを設定できます。

        • analyzer: テキストセグメンテーションに使用するアナライザ。有効な値: jieba (デフォルト) および ik_smart

        • k1: BM25 アルゴリズムにおける term 周波数飽和度。値は 0 より大きい必要があります。デフォルト値: 1.2。

        • b: BM25 アルゴリズムにおけるドキュメント長が関連性スコアに与える影響。有効な値: 0~1。デフォルト値: 0.75。

      • lexical_algorithm パラメーターを vector に設定した場合、さらに次のパラメーターを設定できます。

        • lexical_use_hnsw: 疎ベクトルに HNSW インデックスを使用するかどうかを指定します。有効な値: 1 (HNSW インデックスを使用することを示します) および 0 (デフォルト、転置インデックスを使用することを示します)。

        • lexical_hnsw_m: lexical_use_hnsw パラメーターが 1 に設定されている場合、このパラメーターは HNSW インデックス固有の M パラメーターを表します。M パラメーターの目的と説明については、HNSW インデックス固有のパラメーターをご参照ください。

        • lexical_hnsw_ef_construct: lexical_use_hnsw パラメーターが 1 に設定されている場合、このパラメーターは HNSW インデックス固有の ef_construct パラメーターを表します。ef_construct パラメーターの目的と説明については、HNSW インデックス固有のパラメーターをご参照ください。

      • hybrid_ratio: クエリ中にベクトル検索に割り当てられるデフォルトの重み。有効な値: 0~1。デフォルト値: 0.5。値は FLOAT 型である必要があります。クエリ結果でフルテキスト検索に割り当てられる重みは 1 - hybrid_ratio と等しくなります。

出力

  • 操作が成功した場合、OK が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

コマンドの例:

# HNSW アルゴリズムとジャカード距離計算式を使用して、ディメンションが 2 でデータ型が BINARY のベクターのベクターインデックスを作成します。
TVS.CREATEINDEX index_name0 2 HNSW JACCARD data_type BINARY

# HNSW アルゴリズムとユークリッド距離計算式を使用して、ディメンションが 2 でデータ型が FLOAT32 のベクターのベクターインデックスを作成します。
TVS.CREATEINDEX index_name1 2 HNSW L2 

# Flat Search アルゴリズムと内積計算式を使用して、ディメンションが 2 でデータ型が FLOAT32 のベクターのベクターインデックスを作成します。
TVS.CREATEINDEX index_name2 2 FLAT IP 

# Flat Search アルゴリズムとジャカード距離計算式を使用して、ディメンションが 2 でデータ型が BINARY のベクターのベクターインデックスを作成します。
TVS.CREATEINDEX index_name3 2 FLAT JACCARD data_type BINARY

# HNSW アルゴリズム、BM25 フルテキスト検索アルゴリズム、および内積計算式を使用して、ディメンションが 2 でデータ型が FLOAT32 のベクターのベクターインデックスを作成します。STRING 型の productname フィールドを転置インデックスとして指定します。
TVS.CREATEINDEX index_name4 2 HNSW IP lexical_algorithm bm25 inverted_index_productname string

# HNSW アルゴリズムと内積計算式を使用して、ディメンションが 2 のベクターの疎ベクトルを作成します。
TVS.CREATEINDEX index_name5 2 HNSW IP lexical_algorithm vector lexical_use_hnsw 1 lexical_hnsw_m 8 lexical_hnsw_ef_construct 100

出力例:

OK

TVS.GETINDEX

項目

説明

構文

TVS.GETINDEX index_name

時間計算量

O(1)

コマンドの説明

指定されたベクターインデックスをクエリし、インデックスのメタデータを取得します。

パラメーター

  • index_name: ベクターインデックスの名前。

出力

  • 操作が成功した場合、ベクターインデックスのメタデータが返されます。

  • 指定されたベクターインデックスが存在しない場合、(空の配列) が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

事前に次のコマンドを実行します。

TVS.CREATEINDEX my_index 2 HNSW L2 auto_gc true lexical_algorithm bm25
TVS.HSET my_index key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index key2 VECTOR [5,6] creation_time 1750

コマンドの例 (algorithm パラメーターを HNSW に設定):

TVS.GETINDEX my_index

出力例:

 1) "lexical_term_count"   // フルテキストインデックス内のトークンの数。値は INT データ型です。
 2) "0"
 3) "lexical_record_count" // フルテキストインデックス内のドキュメントの数。値は INT データ型です。
 4) "0"
 5) "lexical_algorithm"    // フルテキストインデックス作成アルゴリズム。
 6) "bm25"
 7) "auto_gc"              // インデックスの自動メモリ領域再利用が有効になっているかどうかを示します。このパラメーターは、HNSW アルゴリズムを使用する場合に返されます。
 8) "1"
 9) "dimension"            // ベクターのディメンション。
10) "2"
11) "attribute_data_size"  // 属性情報によって使用されるメモリ量。単位: バイト。
12) "3720"
13) "distance_method"      // 2 つのベクター間の距離を計算するために使用されるメソッド。
14) "L2"
15) "data_type"            // ベクターのデータ型。
16) "FLOAT32"
17) "algorithm"            // インデックス作成アルゴリズム。
18) "HNSW"
19) "index_data_size"      // ベクターによって使用されるメモリ量。単位: バイト。
20) "105128040"
21) "M"                    // グラフインデックス構造の各レイヤーにおける最大送信ネイバー数。このパラメーターは、HNSW アルゴリズムを使用する場合に返されます。
22) "16"
23) "data_count"           // ユーザーに関連付けられたレコードまたはデータポイントの数。
24) "3"
25) "current_record_count" // ベクターの総数。
26) "3"
27) "ef_construct"         // HNSW アルゴリズムを使用する場合の動的配列の長さ。
28) "100"
29) "inverted_index_productname" // フィールド名、データ型、数量を含む転置インデックス情報。
30) "field: productname, type: string, size: 1"
31) "delete_record_count"  // 削除されるベクターの数。
32) "0"

TVS.DELINDEX

項目

説明

構文

TVS.DELINDEX index_name

時間計算量

O(N)。N はベクターインデックス内のキーの数を示します。

コマンドの説明

指定されたベクターインデックスと、そのインデックスのすべてのデータを削除します。

オプション

  • index_name: ベクターインデックスの名前。

出力

  • 操作が成功した場合、ベクターインデックスが削除され、1 の値が返されます。

  • 指定されたベクターインデックスが存在しない場合、0 の値が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

コマンドの例:

TVS.DELINDEX index_name0

出力例:

 (integer) 1

TVS.SCANINDEX

項目

説明

構文

TVS.SCANINDEX cursor [MATCH pattern] [COUNT count]

時間計算量

O(N)。N は Tair インスタンス内のベクターインデックスの数を示します。

コマンドの説明

Tair インスタンス内で特定の基準を満たすベクターインデックスをスキャンします。

オプション

  • cursor: このスキャンで使用されるカーソル。カーソル位置は 0 から始まります。

  • pattern: このスキャンで使用されるパターン。

  • count: スキャンするキーの数。デフォルト値: 10。システムは、各反復で count パラメーターで指定された正確なキーの数を常に返すとは限りません。

出力

  • 操作が成功した場合、配列が返されます。

    • 配列の要素 1: 次のスキャンのためのカーソル。スキャンが完了した場合、0 の値が返されます。

    • 配列の要素 2: スキャンされたベクターインデックスの名前。これは index_name パラメーターの値です。

  • それ以外の場合は、エラーメッセージが返されます。

コマンドの例:

TVS.SCANINDEX 0

出力例:

1) "0"
2) 1) "index_name1"
   2) "index_name0"
   3) "index_name2"
   4) "index_name3"

出力例 (pattern パラメーターを含む):

TVS.SCANINDEX 0 MATCH **name[0|1]

出力例:

1) "0"
2) 1) "index_name1"
   2) "index_name0"

TVS.HSET

項目

説明

構文

TVS.HSET index_name key attribute_key attribute_value [attribute_key attribute_value] ...

時間計算量

データの挿入または更新の操作にベクター値の作成または更新が含まれない場合、時間計算量は O(1) です。それ以外の場合、時間計算量は O(log(N)) です。N はベクターインデックス内のキーの数を示します。

コマンドの説明

データレコード (key) をベクターインデックスに挿入します。レコードが既に存在する場合、既存のレコードは上書きされます。

オプション

  • index_name: ベクターインデックスの名前。

  • key: ベクターのプライマリキー識別子。TVS.DEL コマンドを実行してキーを削除できます。

  • attribute_key および attribute_value: キーと値のペア形式のレコードの値。

    • ベクターを挿入するには、attribute_keyVECTOR に設定し、attribute_valuedims パラメーターで指定されたベクターインデックスのディメンションと同じディメンションを持つベクター文字列に設定します。例: VECTOR [1,2]。キーには 1 つのベクターのみを書き込むことができます。ベクターを複数回書き込むと、既存のデータは上書きされます。

    • 必須パラメーターが指定されたハイブリッドインデックスにテキストデータを挿入するには、attribute_keyTEXT に設定し、attribute_value"TairVector is an in-house vector database service of Tair" などのテキストデータ、または "[[2,0.221],[42,09688],...]" などのベクトル化されたデータに設定します。

    • 他の属性を挿入するには、これらの属性に関連するカスタムパラメーターを指定します。例: create_time 1663637425 および location Hangzhou

出力

  • 操作が成功した場合、挿入されたキーの数が返されます。既存のフィールドが更新された場合、0 の値が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

コマンドの例:

TVS.HSET my_index key5 VECTOR [7,8] TEXT "TairVector is an in-house vector database service of Tair" create_time 1800

出力例:(integer) 3

(integer) 3

TVS.HGETALL

項目

説明

構文

TVS.HGETALL index_name key

時間計算量

O(1)

コマンドの説明

指定されたベクターインデックス内の指定された key のすべてのデータレコードをクエリします。

パラメーター

  • index_name: ベクターインデックスの名前。

  • key: ベクターのプライマリキー識別子。

出力

  • 操作が成功した場合、key のすべてのデータレコードが返されます。

  • 指定されたベクターインデックスまたは key が存在しない場合、(空の配列) が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

コマンドの例:

TVS.HGETALL index_name0 key0

出力例:1) "VECTOR" 2) "[1,2]" 3) "location" 4) "Hangzhou" 5) "create_time" 6) "1663637425"

1) "VECTOR"
2) "[1,2]"
3) "location"
4) "Hangzhou"
5) "create_time"
6) "1663637425"

TVS.HMGET

項目

説明

構文

TVS.HMGET index_name key attribute_key [attribute_key ...]

時間計算量

O(1)

コマンドの説明

指定されたベクターインデックスの指定された key 内の attribute keys の値をクエリします。

オプション

  • index_name: ベクターインデックスの名前。

  • key: ベクターのプライマリキー識別子。

  • attribute_key: 管理する属性キー。複数のキーを指定できます。特定のベクターをクエリするには、attribute_key を VECTOR に設定します。フルテキストインデックス内の生のテキストデータをクエリするには、attribute_key を TEXT に設定します。

出力

  • 操作が成功した場合、attribute keys の値が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

コマンドの例:

TVS.HMGET index_name0 key0 create_time location VECTOR TEXT

出力例:

1) "1800"
2) "[7,8]"
3) "TairVector は、Tair の自社開発ベクトルデータベースサービスです"

TVS.DEL

項目

説明

構文

TVS.DEL index_name key [key ...]

時間計算量

O(1)

コマンドの説明

key パラメーターを使用して、指定されたベクターインデックスから指定されたベクターを削除します。

パラメーター

  • index_name: ベクターインデックスの名前。

  • key: ベクターのプライマリキー識別子。複数のキーを指定できます。

出力

  • 操作が成功した場合、指定された keys が削除され、削除された keys の数が返されます。

  • 指定されたベクターインデックスが存在しない場合、0 の値が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

コマンドの例:

TVS.DEL index_name0 keyV

出力例:

 (integer) 1

TVS.HDEL

項目

説明

構文

TVS.HDEL index_name key attribute_key [attribute_key ...]

時間計算量

O(1)

コマンドの説明

ベクターインデックス内のデータレコード (key) から、指定された attribute_key とその値を削除します。

パラメーター

  • index_name: ベクターインデックスの名前。

  • key: ベクターのプライマリキー識別子。複数のキーを指定できます。

  • attribute_key: 管理する属性キー。複数の属性キーを指定できます。ベクターデータを削除するには、attribute_key を VECTOR に設定します。フルインデックスデータを削除するには、attribute_key を TEXT に設定します。

出力

  • 操作が成功した場合、指定されたデータが削除され、削除された attribute_key の数が返されます。

  • 指定されたベクターインデックスが存在しない場合、0 の値が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

コマンドの例:

TVS.HDEL index_name0 keyc VECTOR

出力例: (integer) 1

 (整数) 1

TVS.SCAN

項目

説明

構文

TVS.SCAN index_name cursor [MATCH pattern] [COUNT count] [FILTER filter_string] [VECTOR vector] [MAX_DIST max_distance]

時間計算量

O(N)。N はベクターインデックス内のキーの数を示します。

コマンドの説明

指定されたベクターインデックス内で特定の基準を満たす keys をスキャンします。

パラメーター

  • index_name: ベクターインデックスの名前。

  • cursor: このスキャンで使用されるカーソル。カーソル位置は 0 から始まります。

  • pattern: このスキャンで使用されるパターン。

  • count: スキャンするキーの数。デフォルト値: 10。システムは、各反復で count パラメーターで指定された正確なキーの数を常に返すとは限りません。

  • filter_string: フィルター条件。

    • + - * / < > ! = ( ) && || などのオペレーターがサポートされています。文字列のサイズを比較することはできません。文字列を入力する場合は、エスケープ文字 (\) を追加する必要があります。例: create_time > 1663637425 && location == \"Hangzhou\"。

    • オペレーターの両側にスペースを追加する必要があります。例: "creation_time > 1735"。

    • BOOLEAN データ型を使用する flag == true 形式はサポートされていません。flag == \"true\" 形式を使用できます。これは、ブール値を文字列として渡します。

  • vector: クエリベクター。このパラメーターは max_distance パラメーターと一緒に使用する必要があります。

  • max_distance: 許可される最大距離。このパラメーターは vector パラメーターと一緒に使用する必要があります。これら 2 つのパラメーターを指定すると、返される配列には、クエリ vector から max_distance パラメーターで指定された距離内にあるすべてのベクターが含まれます。

出力

  • 操作が成功した場合、配列が返されます。

    • 配列の要素 1: 次のスキャンのためのカーソル。スキャンが完了した場合、0 の値が返されます。

    • 配列の要素 2: スキャンされた keys の名前。

  • それ以外の場合は、エラーメッセージが返されます。

コマンドの例:

TVS.SCAN index_name0 0

出力例:1) "0" 2) 1) "key0" 2) "keyV"

1) "0"
2) 1) "key0"
   2) "keyV"

TVS.HINCRBY

項目

説明

構文

TVS.HINCRBY index_name key attribute_key num

時間計算量

O(1)

コマンドの説明

指定されたベクターインデックス内の指定された key の指定された属性キーの値を、指定された整数値 (num) だけ増やします。

指定された属性キーが存在しない場合、属性キーは自動的に作成され、指定された num 値が割り当てられます。属性キーが既に存在する場合、TairVector は指定された num 値を既存の値に加算して属性キーの値を更新します。

パラメーター

  • index_name: ベクターインデックスの名前。

  • key: ベクターのプライマリキー識別子。

  • attribute_key: 管理する属性キー。

  • num: 属性キーの値を増やす整数値。

出力

  • 操作が成功した場合、属性キーの値は num 値だけ増加します。

  • それ以外の場合は、エラーメッセージが返されます。

コマンドの例:

TVS.HINCRBY index_name0 key0 tv01 20 

出力例:(integer) 20

(integer) 20

TVS.HINCRBYFLOAT

項目

説明

構文

TVS.HINCRBYFLOAT index_name key attribute_key num

時間計算量

O(1)

コマンドの説明

指定されたベクターインデックス内の指定された key の指定された属性キーの値を、指定された浮動小数点数 (num) だけ増やします。

指定された属性キーが存在しない場合、属性キーは自動的に作成され、指定された num 値が割り当てられます。属性キーが既に存在する場合、TairVector は指定された num 値を既存の値に加算して属性キーの値を更新します。

オプション

  • index_name: ベクターインデックスの名前。

  • key: ベクターのプライマリキー識別子。

  • attribute_key: 管理する属性キー。

  • num: 属性キーの値を増やす浮動小数点数。

出力

  • 操作が成功した場合、属性キーの値は num 値だけ増加します。

  • それ以外の場合は、エラーメッセージが返されます。

サンプルコマンド:

TVS.HINCRBYFLOAT index_name0 key0 tv02 9.34

出力例:

"9.34"

TVS.HPEXPIREAT

項目

説明

構文

TVS.HPEXPIREAT index_name key milliseconds-timestamp

時間計算量

O(1)

コマンドの説明

指定されたベクターインデックス内の指定された key に対して、ミリ秒単位で正確な絶対有効期限時刻を指定します。

パラメーター

  • index_name: ベクターインデックスの名前。

  • key: ベクターのプライマリキー識別子。

  • milliseconds-timestamp: ミリ秒単位で正確な UNIX タイムスタンプ。指定されたタイムスタンプが現在時刻より前の場合、key はすぐに有効期限切れになります。

出力

  • 指定された key が存在し、正常に設定された場合、1 の値が返されます。

  • 指定された key が存在しない場合、0 の値が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

コマンドの例:

TVS.HPEXPIREAT index_name0 key1 16914619090000

出力例:

(integer) 1

TVS.HPEXPIRE

項目

説明

構文

TVS.HPEXPIRE index_name key milliseconds-timestamp

時間計算量

O(1)

コマンドの説明

指定されたベクターインデックス内の指定された key に対して、ミリ秒単位で正確な相対有効期限時刻を指定します。

オプション

  • index_name: ベクターインデックスの名前。

  • key: ベクターのプライマリキー識別子。

  • milliseconds-timestamp: 相対有効期限時刻。単位: ミリ秒。

出力

  • 指定された key が存在し、正常に設定された場合、1 の値が返されます。

  • 指定された key が存在しない場合、0 の値が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

コマンドの例:

TVS.HPEXPIRE index_name0 key1 1000

サンプル出力:

(integer) 1

TVS.HEXPIREAT

項目

説明

構文

TVS.HEXPIREAT index_name key timestamp

時間計算量

O(1)

コマンドの説明

指定されたベクターインデックス内の指定された key に対して、秒単位で正確な絶対有効期限時刻を指定します。

オプション

  • index_name: ベクターインデックスの名前。

  • key: ベクターのプライマリキー識別子。

  • timestamp: 秒単位で正確な UNIX タイムスタンプ。指定されたタイムスタンプが現在時刻より前の場合、key はすぐに有効期限切れになります。

出力

  • 指定された key が存在し、正常に設定された場合、1 の値が返されます。

  • 指定された key が存在しない場合、0 の値が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

コマンドの例:

TVS.HPEXPIREAT index_name0 key2 1691466981

出力例:(integer) 1

(integer) 1

TVS.HEXPIRE

項目

説明

構文

TVS.HEXPIRE index_name key timestamp

時間計算量

O(1)

コマンドの説明

指定されたベクターインデックス内の指定された key に対して、秒単位で正確な相対有効期限時刻を指定します。

オプション

  • index_name: ベクターインデックスの名前。

  • key: ベクターのプライマリキー識別子。

  • timestamp: 相対有効期限時刻。単位: 秒。

出力

  • 指定された key が存在し、正常に設定された場合、1 の値が返されます。

  • 指定された key が存在しない場合、0 の値が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

コマンドの例:

TVS.HPEXPIREAT index_name0 key2 100

出力例:(integer) 1

(integer) 1

TVS.HPTTL

項目

説明

構文

TVS.HPTTL index_name key

時間計算量

O(1)

コマンドの説明

指定されたベクターインデックス内の指定された key の TTL をミリ秒単位で正確にクエリします。

パラメーター

  • index_name: ベクターインデックスの名前。

  • key: ベクターのプライマリキー識別子。

出力

  • 指定された key が存在し、TTL が設定されている場合、TTL が返されます。単位: ミリ秒。

  • 指定された key は存在するが、絶対有効期限時刻が設定されていない場合、-1 の値が返されます。

  • 指定された key または index_name が存在しない場合、-2 の値が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

コマンドの例:

TVS.HPTTL index_name0 key2

サンプル出力:

(integer) 65417

TVS.HTTL

項目

説明

構文

TVS.HTTL index_name key

時間計算量

O(1)

コマンドの説明

指定されたベクターインデックス内の指定された key の TTL を秒単位で正確にクエリします。

パラメーター

  • index_name: ベクターインデックスの名前。

  • key: ベクターのプライマリキー識別子。

出力

  • 指定された key が存在し、TTL が設定されている場合、TTL が返されます。単位: 秒。

  • 指定された key は存在するが、絶対有効期限時刻が設定されていない場合、-1 の値が返されます。

  • 指定された key または index_name が存在しない場合、-2 の値が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

コマンドの例:

TVS.HTTL index_name0 key2

出力例:

(integer) 58

TVS.HPEXPIRETIME

項目

説明

構文

TVS.HPEXPIRETIME index_name key

時間計算量

O(1)

コマンドの説明

指定されたベクターインデックス内の指定された key の絶対有効期限時刻をミリ秒単位で正確にクエリします。

パラメーター

  • index_name: ベクターインデックスの名前。

  • key: ベクターのプライマリキー識別子。

出力

  • 指定された key が存在し、絶対有効期限時刻が設定されている場合、絶対有効期限時刻 (UNIX タイムスタンプ) が返されます。単位: ミリ秒。

  • 指定された key は存在するが、絶対有効期限時刻が設定されていない場合、-1 の値が返されます。

  • 指定された key または index_name が存在しない場合、-2 の値が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

コマンドの例:

TVS.HPEXPIRETIME index_name0 key2

出力例:

(integer) 1691473985764

TVS.HEXPIRETIME

項目

説明

構文

TVS.HEXPIRETIME index_name key

時間計算量

O(1)

コマンドの説明

指定されたベクターインデックス内の指定された key の絶対有効期限時刻を秒単位で正確にクエリします。

パラメーター

  • index_name: ベクターインデックスの名前。

  • key: ベクターのプライマリキー識別子。

出力

  • 指定された key が存在し、絶対有効期限時刻が設定されている場合、絶対有効期限時刻 (UNIX タイムスタンプ) が返されます。単位: 秒。

  • 指定された key は存在するが、絶対有効期限時刻が設定されていない場合、-1 の値が返されます。

  • 指定された key または index_name が存在しない場合、-2 の値が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

コマンドの例:

TVS.HEXPIRETIME index_name0 key2

サンプル出力:

(integer) 1691473985

TVS.KNNSEARCH

項目

説明

構文

TVS.KNNSEARCH index_name topN vector [filter_string] [param_key param_value]

時間計算量

  • HNSW アルゴリズム: O(log(N))。

  • FLAT アルゴリズム: O(N)。

N はベクターインデックス内のキーの数を示します。

コマンドの説明

指定されたベクターインデックス内で、指定されたベクターの最近傍ベクターをクエリします。最大 topN 個のベクターを返すことができます。

オプション

  • index_name: ベクターインデックスの名前。

  • topN: 返すベクターの数。有効な値: 1~10000。

  • vector: 最近傍をクエリするベクター。ハイブリッドインデックスメソッドを使用してフルテキスト検索のみを実行する場合は、vector フィールドを空の文字列 ("") に設定できます。

  • filter_string: フィルター条件。

    • + - * / < > ! = ( ) && || などのオペレーターがサポートされています。文字列のサイズを比較することはできません。文字列を入力する場合は、エスケープ文字 (\) を追加する必要があります。例: "create_time > 1663637425 && location == \"Hangzhou\""

    • オペレーターの両側にスペースを追加する必要があります。例: "creation_time > 1735"

    • BOOLEAN データ型を使用する flag == true 形式はサポートされていません。flag == \"true\" 形式を使用できます。これは、ブール値を文字列として渡します。

  • param_key および param_value: クエリの操作パラメーター。有効な値:

    • ef_search: 動的配列の長さ。デフォルト値: 100。有効な値: 1~1000。値が大きいほど、検索精度が高くなります。これにより、パフォーマンスのオーバーヘッドが高くなります。このパラメーターは、HNSW アルゴリズムを使用する場合にのみ使用できます。

      sparse_ef_search: ハイブリッドインデックスを作成するときに疎ベクトルに HNSW インデックスを使用する場合、ef_search パラメーターを HNSW インデックスの sparse_ef_search パラメーターとして使用します。

    • MAX_DIST: 許可される最大距離。FLOAT 型である必要があります。指定されたベクターと近傍ベクター間の距離がこのパラメーターの値より大きい場合、近傍ベクターのキーはフィルターされ、検索結果から除外されます。

    • TEXT: ハイブリッド検索を実行するテキスト。このフィールドにテキストまたはベクターデータを渡すことができます。このフィールドを指定しない場合、または空の文字列 ("") をこのフィールドに渡した場合、ベクトル検索のみが実行されます。

    • hybrid_ratio: クエリ中にベクトル検索に割り当てられる重み。デフォルトでは、このフィールドは TVS.CREATEINDEX コマンドの hybrid_ratio パラメーターで指定された値を取ります。有効な値: 0~1。値は FLOAT 型である必要があります。クエリ結果でフルテキスト検索に割り当てられる重みは 1 - hybrid_ratio と等しくなります。

    • デフォルトでは、システムは k-最近傍 (KNN) ベクトル検索の後にスカラーフィルタリングを実行します。これは PostFilter ポリシーとして知られています。

      • vector_filter_count: ベクトル検索中にフィルターできるレコードの最大数。デフォルト値: 10000。

        PostFilter ポリシーでは、ベクトル検索結果からフィルターされたレコードの数が vector_filter_count 値を超えても、操作が返すのに十分な量のデータを収集できない場合、システムはベクトル検索を終了します。

      • fulltext_filter_count: フルテキスト検索中にフィルターできるレコードの最大数。デフォルト値: 10000。

        PostFilter ポリシーでは、フルテキスト検索結果からフィルターされたレコードの数が fulltext_filter_count 値を超えても、操作が返すのに十分な量のデータを収集できない場合、システムはフルテキスト検索を終了します。

      • KNN ベクトル検索を実行する前に、転置インデックスに基づいてシステムにスカラーフィルタリングを実行させたい場合は、クエリに search_policy scala パラメーターを追加して PreFilter ポリシーを使用できます。

        ivf_filter_count パラメーターも使用でき、転置インデックスに基づいてフィルターできるレコードの最大数を指定します。デフォルト値は 10000 です。PreFilter ポリシーでは、この初期スカラーフィルタリング段階で処理されるレコードの数が ivf_filter_count 値を超えると、システムは自動的に PostFilter ポリシーにダウングレードします。

      説明

      ほとんどの場合、前述のパラメーターのデフォルト設定により、システムは精度を維持しながら許容可能なレイテンシーで動作することが保証されます。ユースケースの特定のニーズに合わせて、これらのパラメーターをリクエストごとに調整できます。ただし、前述のパラメーターの値を大きくすると、クエリのレイテンシーが高くなる可能性があります。

出力

  • 操作が成功した場合、近傍ベクターの keys は、指定されたベクターとの距離の昇順で返されます。

  • 指定されたベクターインデックスが存在しない場合、(空の配列) が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

事前に次のコマンドを実行します。

TVS.CREATEINDEX my_index_k 2 HNSW L2 inverted_index_productname string
TVS.HSET my_index_k key0 VECTOR [1,2] creation_time 1730 productname "Aliyun"
TVS.HSET my_index_k key1 VECTOR [3,4] creation_time 1740 productname "other"
TVS.HSET my_index_k key2 VECTOR [5,6] creation_time 1750 productname "Aliyun"

コマンドの例 1:

TVS.KNNSEARCH my_index_k 2 [3,3.1] "creation_time > 1735"

サンプル出力 1:

1) "key1"
2) "0.81000018119812012"
3) "key2"
4) "12.410000801086426"

コマンド例 2:

TVS.KNNSEARCH my_index_k 2 [3,3.1]  "creation_time > 1735 && productname ==  \"Aliyun\"" search_policy scala ivf_filter_count 15000

出力例 2:

1) "key2"
2) "12.410000801086426"

TVS.KNNSEARCHFIELD

項目

説明

構文

TVS.KNNSEARCHFIELD index_name topN vector field_count field_name [field_name ...] [filter_string] [param_key param_value]

時間計算量

  • HNSW アルゴリズム: O(log(N))。

  • FLAT アルゴリズム: O(N)。

N はベクターインデックス内のキーの数を示します。

コマンドの説明

指定されたベクターインデックス内で、指定されたベクターの最近傍ベクターをクエリします。このコマンドの検索ロジックは TVS.KNNSEARCH と同じですが、検索結果とともにタグ属性を返す機能が追加されています。

パラメーター

  • index_name: ベクターインデックスの名前。

  • topN: 返すベクターの数。有効な値: 1~10000。

  • vector: 最近傍をクエリするベクター。ハイブリッドインデックスメソッドを使用してフルテキスト検索のみを実行する場合は、vector フィールドを空の文字列 ("") に設定できます。

  • field_count: 返すタグ属性の数。すべてのタグを返す場合は、field_count パラメーターを 0 に設定します。

  • field_name: タグ名。タグの数は field_count 値と同じである必要があります。

  • filter_string: フィルター条件。詳細については、「TVS.KNNSEARCH」をご参照ください。

  • param_key および param_value: クエリの操作パラメーター。詳細については、「TVS.KNNSEARCH」をご参照ください。

出力

  • 操作が成功した場合、近傍ベクターの keys は、指定されたベクターとの距離の昇順で返されます。ベクターのタグ属性もキーと値のペアの形式で返されます。

  • 指定されたベクターインデックスが存在しない場合、(空の配列) が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

事前に次のコマンドを実行します。

TVS.CREATEINDEX my_index_k 2 HNSW L2
TVS.HSET my_index_k key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_k key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_k key2 VECTOR [5,6] creation_time 1750

コマンドの例:

TVS.KNNSEARCHFIELD my_index_k 2 [3,3.1] 0 "creation_time > 1735"

サンプル出力:

1) 1) "key1"
   2) "0.81000018119812012"
   3) "VECTOR"
   4) "[3,4]"
   5) "creation_time"
   6) "1740"
2) 1) "key2"
   2) "12.410000801086426"
   3) "VECTOR"
   4) "[5,6]"
   5) "creation_time"
   6) "1750"

TVS.GETDISTANCE

項目

説明

構文

TVS.GETDISTANCE index_name vector key_count key [key, ...] [TOPN topN] [FILTER filter_string] [MAX_DIST max_distance]

時間計算量

  • HNSW アルゴリズム: O(log(N))。

  • FLAT アルゴリズム: O(N)。

N はベクターインデックス内のキーの数を示します。

コマンドの説明

指定されたベクターインデックス内で、指定されたキーに対してベクトル最近傍クエリを実行します。

オプション

  • index_name: ベクターインデックスの名前。

  • vector: 最近傍をクエリするベクター。

  • key_count: クエリするキーの数。

  • key: キーの名前。キーの数は key_count の値と同じである必要があります。

  • TOPN: 返すキーの数。デフォルトでは、このパラメーターは key_count の値に設定されます。有効な値: [1,key_count 値]。

  • FILTER: フィルター条件。

    • + - * / < > ! = ( ) && || などのオペレーターがサポートされています。文字列のサイズを比較することはできません。文字列を入力する場合は、エスケープ文字 (\) を追加する必要があります。例: create_time > 1663637425 && location == \"Hangzhou\"

    • オペレーターの両側にスペースを追加する必要があります。例: "creation_time > 1735"

    • BOOLEAN データ型を使用する flag == true 形式はサポートされていません。flag == \"true\" 形式を使用できます。これは、ブール値を文字列として渡します。

  • MAX_DIST: 許可される最大距離。指定されたベクターと近傍ベクター間の距離がこのパラメーターの値より大きい場合、近傍ベクターのキーはフィルターされ、検索結果から除外されます。

出力

  • 操作が成功した場合、各指定されたベクターに対する近傍ベクターの距離が、キーの順序で返されます。TOPN パラメーターを指定した場合、近傍ベクターのキーは、各指定されたベクターとの距離の昇順で返されます。

  • 指定されたベクターインデックスが存在しない場合、(空の配列) が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

事前に次のコマンドを実行します。

TVS.CREATEINDEX my_index_k 2 HNSW L2
TVS.HSET my_index_k key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_k key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_k key2 VECTOR [5,6] creation_time 1750

サンプルコマンド:

TVS.GETDISTANCE my_index_k [1,1] 2 key1 key2

出力例:

1) "key1"
2) "13"
3) "key2"
4) "41"

TVS.MKNNSEARCH

項目

説明

構文

TVS.MKNNSEARCH index_name topN vector_count vector [vector ...] [filter_string] [param_key param_value]

時間計算量

  • HNSW アルゴリズム: vector_count × O(log(N))。

  • FLAT アルゴリズム: vector_count × O(N)。

N はベクターインデックス内のキーの数を示します。

コマンドの説明

指定されたベクターインデックス内で、指定された複数のベクターの最近傍ベクターをクエリします。

パラメーター

  • index_name: ベクターインデックスの名前。

  • topN: 各ベクターに対して返す近傍ベクターの数。有効な値: 1~10000。

  • vector_count: 指定されたベクターの数。

  • vector: 最近傍をクエリするベクター。ハイブリッドインデックスメソッドを使用してフルテキスト検索のみを実行する場合は、vector フィールドを空の文字列 ("") に設定できます。

  • filter_string: フィルター条件。詳細については、「TVS.KNNSEARCH」をご参照ください。

  • param_key および param_value: クエリの操作パラメーター。詳細については、「TVS.KNNSEARCH」をご参照ください。

出力

  • 操作が成功した場合、結果は配列で返されます。各配列には、各指定されたベクターとの距離の昇順で近傍ベクターの keys が含まれます。

  • 指定されたベクターインデックスが存在しない場合、(空の配列) が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

事前に次のコマンドを実行します。

TVS.CREATEINDEX my_index_m 2 HNSW L2
TVS.HSET my_index_m key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_m key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_m key2 VECTOR [5,6] creation_time 1750

コマンドの例:

TVS.MKNNSEARCH my_index_m 2 2 [3,4] [5,6] "creation_time > 1735"

出力例:

1) 1) "key1"
   2) "0"
   3) "key2"
   4) "8"
2) 1) "key2"
   2) "0"
   3) "key1"
   4) "8"

TVS.MINDEXKNNSEARCH

項目

説明

構文

TVS.MINDEXKNNSEARCH index_count index_name [index_name ...] topN vector [filter_string] [param_key param_value]

時間計算量

  • HNSW アルゴリズム: index_count × O(log(N))。

  • FLAT アルゴリズム: index_count × O(N)。

N はベクターインデックス内のキーの数を示します。

コマンドの説明

複数のベクターインデックスにまたがって、指定されたベクターの最近傍ベクターをクエリします。

オプション

  • index_count: ベクターインデックスの数。

  • index_name: ベクターインデックスの名前。

  • topN: 返す結果の数。有効な値: 1~10000。デフォルトでは、コマンドは各ベクターインデックスから topN の結果をクエリし、結果を集約して、topN の最近傍の結果を返します。

  • vector: 最近傍をクエリするベクター。

  • filter_string: フィルター条件。詳細については、「TVS.KNNSEARCH」をご参照ください。

  • param_key および param_value: クエリの操作パラメーター。詳細については、「TVS.KNNSEARCH」をご参照ください。

出力

  • 操作が成功した場合、近傍ベクターの keys は、指定されたベクターとの距離の昇順で返されます。

  • 指定されたベクターインデックスが存在しない場合、(空の配列) が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

事前に次のコマンドを実行します。

TVS.CREATEINDEX my_index_mk 2 HNSW L2
TVS.HSET my_index_mk key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_mk key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_mk key2 VECTOR [5,6] creation_time 1750
TVS.CREATEINDEX my_index_mx 2 HNSW L2
TVS.HSET my_index_mx key5 VECTOR [8,7] creation_time 1730
TVS.HSET my_index_mx key6 VECTOR [6,5] creation_time 1740
TVS.HSET my_index_mx key7 VECTOR [4,3] creation_time 1750

コマンドの例:

TVS.MINDEXKNNSEARCH 2 my_index_mk my_index_mx 2 [0,0]

出力例:1) "key0" 2) "5" 3) "key7" 4) "25"

1) "key0"
2) "5"
3) "key7"
4) "25"

TVS.MINDEXKNNSEARCHFIELD

項目

説明

構文

TVS.MINDEXKNNSEARCHFIELD index_count index_name [index_name ...] topN vector field_count field_name [field_name ...] [filter_string] [param_key param_value]

時間計算量

  • HNSW アルゴリズム: index_count × O(log(N))。

  • FLAT アルゴリズム: index_count × O(N)。

N はベクターインデックス内のキーの数を示します。

コマンドの説明

複数のベクターインデックスにまたがって、指定されたベクターの最近傍ベクターをクエリします。検索結果とともにタグ属性を返すことができます。

オプション

  • index_count: ベクターインデックスの数。

  • index_name: ベクターインデックスの名前。

  • topN: 返す結果の数。有効な値: 1~10000。デフォルトでは、システムは各ベクターインデックスから topN の結果を取得し、それらを集約して、topN の最近傍の結果を返します。

  • vector: 最近傍をクエリするベクター。

  • field_count: 返すタグ属性の数。すべてのタグを返す場合は、field_count パラメーターを 0 に設定します。

  • field_name: タグ名。タグの数は field_count 値と同じである必要があります。

  • filter_string: フィルター条件。詳細については、「TVS.KNNSEARCH」をご参照ください。

  • param_key および param_value: クエリの操作パラメーター。詳細については、「TVS.KNNSEARCH」をご参照ください。

出力

  • 操作が成功した場合、近傍ベクターの keys は、指定されたベクターとの距離の昇順で返されます。ベクターのタグ属性もキーと値のペアの形式で返されます。

  • 指定されたベクターインデックスが存在しない場合、(空の配列) が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

事前に次のコマンドを実行します。

TVS.CREATEINDEX my_index_mk 2 HNSW L2
TVS.HSET my_index_mk key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_mk key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_mk key2 VECTOR [5,6] creation_time 1750
TVS.CREATEINDEX my_index_mx 2 HNSW L2
TVS.HSET my_index_mx key5 VECTOR [8,7] creation_time 1730
TVS.HSET my_index_mx key6 VECTOR [6,5] creation_time 1740
TVS.HSET my_index_mx key7 VECTOR [4,3] creation_time 1750

コマンドの例:

TVS.MINDEXKNNSEARCHFIELD 2 my_index_mk my_index_mx 2 [0,0] 0

出力例:

1) 1) "key0"
   2) "5"
   3) "my_index_mk"
   4) "VECTOR"
   5) "[1,2]"
   6) "creation_time"
   7) "1730"
2) 1) "key1"
   2) "25"
   3) "my_index_mk"
   4) "VECTOR"
   5) "[3,4]"
   6) "creation_time"
   7) "1740"

TVS.MINDEXMKNNSEARCH

項目

説明

構文

TVS.MINDEXMKNNSEARCH index_count index_name [index_name ...] topN vector_count vector [vector ...] [filter_string] [param_key param_value]

時間計算量

  • HNSW アルゴリズム: index_count × vector_count × O(log(N))。

  • FLAT アルゴリズム: index_count × vector_count × O(N)。

N はベクターインデックス内のキーの数を示します。

コマンドの説明

複数のベクターインデックスにまたがって、指定された複数のベクターの最近傍ベクターをクエリします。

パラメーター

  • index_count: ベクターインデックスの数。

  • index_name: ベクターインデックスの名前。

  • topN: 各ベクターに対して返す近傍ベクターの数。有効な値: 1~10,000。デフォルトでは、システムは各ベクターインデックスから topN の結果をクエリし、結果を集約して、topN の最近傍の結果を返します。

  • vector_count: 指定されたベクターの数。

  • vector: 最近傍をクエリするベクター。

  • filter_string: フィルター条件。詳細については、「TVS.KNNSEARCH」をご参照ください。

  • param_key および param_value: クエリの操作パラメーター。詳細については、「TVS.KNNSEARCH」をご参照ください。

出力

  • 操作が成功した場合、結果は配列で返されます。各配列には、各指定されたベクターとの距離の昇順で近傍ベクターの keys が含まれます。

  • 指定されたベクターインデックスが存在しない場合、(空の配列) が返されます。

  • それ以外の場合は、エラーメッセージが返されます。

事前に次のコマンドを実行します。

TVS.CREATEINDEX my_index_mk 2 HNSW L2
TVS.HSET my_index_mk key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_mk key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_mk key2 VECTOR [5,6] creation_time 1750
TVS.CREATEINDEX my_index_mx 2 HNSW L2
TVS.HSET my_index_mx key5 VECTOR [8,7] creation_time 1730
TVS.HSET my_index_mx key6 VECTOR [6,5] creation_time 1740
TVS.HSET my_index_mx key7 VECTOR [4,3] creation_time 1750

コマンドの例:

TVS.MINDEXMKNNSEARCH 2 my_index_mk my_index_mx 2 2 [0,0] [3,3]

出力例:1) 1) "key0" 2) "5" 3) "key7" 4) "25" 2) 1) "key1" 2) "1" 3) "key7" 4) "1"

1) 1) "key0"
   2) "5"
   3) "key7"
   4) "25"
2) 1) "key1"
   2) "1"
   3) "key7"
   4) "1"