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

Tair (Redis® OSS-Compatible):ベクトル

最終更新日:Nov 15, 2024

TairVectorは、Tairチームによって開発された拡張データ構造で、ベクターの高性能なリアルタイム保存と検索を提供します。

概要

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

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

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

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

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

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

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

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

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

リリースノート

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

  2. 2022年11月22日のTair6.2.2.0のリリースに伴い、TairVectorへの2つの注目すべき追加は、Jaccard距離式のサポートとTVS.GETINDEXコマンドの拡張です。 このコマンドは、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日のTair6.2.8.2のリリースに伴い、TairVectorへの2つの注目すべき追加は、Cosine距離式のサポートとHNSWインデックスの自動メモリ空間再利用です。

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

  • ビジネスで高いデータ永続性が必要な場合は、#no_loose_tsync-repl-modeパラメーターをsemisyncに設定して、半同期レプリケーション機能を有効にすることを推奨します。 詳細については、「インスタンスのパラメーターの値の変更」をご参照ください。

サポートされるコマンド

表 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カーソル [マッチパターン] [カウント]

Tairインスタンスで特定の条件を満たすベクトルインデックスをスキャンします。

ベクトルに対する操作

TVS.HSET

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

指定したベクトルインデックスにベクトルを挿入します。 ベクトルがすでに存在する場合、既存のデータは上書きされます。

TVS.HGETALL

TVS.HGETALL index_name key

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

TVS.HMGET

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

指定されたベクターインデックスの指定されたkey内の属性keyの値を照会します。

TVS.DEL

TVS.DEL index_name key [key ...]

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

TVS.HDEL

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

指定されたベクトルの指定された属性を指定されたベクトルインデックスから削除します。

TVS. スキャン

TVS.SCAN index_name cursor [MATCH pattern] [COUNT count] [FILTER filter_string] [ベクトルベクトル] [MAX_DIST max_distance]

指定したベクターインデックスで特定の条件を満たすキーをスキャンします。

TVS. ヒンクルビー

TVS.HINCRBY index_name key attribute_key num

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

TVS. ヒンクルフロート

TVS.HINCRBYFLOAT index_name key attribute_key num

指定されたベクトルインデックスの指定されたキーの指定された属性キーの値を、指定された浮動小数点数 (num) だけ増加させます。

TVS.HPEXPIREAT

TVS.HPEXPIREAT index_name keyミリ秒-timestamp

指定されたベクトルインデックスの指定されたキーのミリ秒単位の絶対有効期限を指定します。

TVS.HPEXPIRE

TVS.HPEXPIRE index_name keyミリ秒-timestamp

指定されたベクトルインデックスの指定されたキーのミリ秒単位の相対有効期限を指定します。

TVS.HEXPIREAT

TVS.HEXPIREAT index_name key timestamp

指定されたベクトルインデックスの指定されたキーの秒単位の絶対有効期限を指定します。

TVS.HEXPIRE

TVS.HEXPIRE index_name key timestamp

指定されたベクトルインデックスの指定されたキーの秒単位の相対有効期限を指定します。

TVS.HPTTL

TVS.HPTTL index_name key

指定されたベクトルインデックス内の指定されたキーのTTLを、ミリ秒の精度で照会します。

TVS.HTTL

TVS.HTTL index_name key

指定されたベクトルインデックス内の指定されたキーのTTLを2番目まで正確に照会します。

TVS.HPEXPIRETIME

TVS.HPEXPIRETIME index_name key

指定されたベクトルインデックス内の指定されたキーの絶対有効期限を、ミリ秒単位で照会します。

TVS.HEXPIRETIME

TVS.HEXPIRETIME index_name key

指定されたベクトルインデックス内の指定されたキーの絶対有効期限を、2番目まで正確に照会します。

ベクトル最近傍クエリ

TVS.KNNSEARCH

TVS.KNNSEARCH index_name topNベクトル [filter_string] [param_key param_value]

指定されたベクトルインデックス内の指定されたベクトルの最近傍ベクトルを照会します。 最大10,000のベクトルを返すことができます。

TVS.KNNSEARCHFIELD

TVS.KNNSEARCHFIELD index_name topNベクトルfield_count field_name [field_name ...] [filter_string] [param_key param_value]

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

TVS.GETDISTANCE

TVS.GETDISTANCEindex_name ベクトル key_count キー[キー, ...] [TOPN]topN] [フィルター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ベクトル [filter_string] [param_key param_value]

複数のベクトルインデックスにわたって、指定されたベクトルの最近傍ベクトルを照会します。

TVS.MINDEXKNNSEARCHFIELD

TVS.MINDEXKNNSEARCHFIELD index_count index_name [index_name ...] topNベクトル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]

複数のベクトルインデックスにわたって、指定されたベクトルの最近傍ベクトルを照会します。

説明

このトピックで使用されるコマンド構文の規則を次に示します。

  • Uppercase keyword: commandキーワードを示します。

  • イタリックテキスト: 変数を示します。

  • [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: フラット検索アルゴリズムを使用して、インデックスを作成せずにベクトルを検索します。 このアルゴリズムは、10,000未満のレコードを含むデータセットに適しています。

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

  • distance_method: 2つのベクトル間の距離を計算するために使用される方法。 有効な値:

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

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

    • COSINE: 2つのベクトル間のコサイン距離。 次の式を使用して、2つのベクトル間の距離を計算できます。1-2つのベクトル間の角度のコサイン。 この方法は、書き込まれたベクトルを単位ベクトルに変換することを含み、これはL2正規化として知られる。 したがって、ベクトル結果は、元のベクトル値と同じではない可能性があります。

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

  • algo_param_keyおよびalog_param_value:

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

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

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

      • BINARY: 0と1のみを含むことができ、Jaccard距離式のみをサポートするバイナリベクトル。

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

      • ef_construct: HNSWアルゴリズムを使用してベクトルインデックスを作成する場合の動的配列の長さ。 デフォルト値:100 有効な値: 1 ~ 1000 より大きな値は、より高い近似最近傍 (ANN) 探索精度を示す。 これは、より高い性能オーバーヘッドをもたらす。

      • M: グラフインデックス構造における各レイヤ上の出力近隣の最大数。 デフォルト値: 16。 設定可能な値は 1~100 です。 値が大きいほど、ANN検索精度が高いことを示す。 これは、より高い性能オーバーヘッドをもたらす。

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

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

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

        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フィールドは、indexを指定し、uint32_t型でなければならず、Valueフィールドは、語彙頻度プロファイルを指定し、FLOAT型でなければならない。

      • lexical_algorithmパラメーターをbm25に設定すると、さらに次のパラメーターを設定できます。

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

        • k1: BM25アルゴリズムにおける周波数飽和という用語。 値は0より大きくなければなりません。 デフォルト値: 1.2

        • b: BM25アルゴリズムにおける関連性スコアに対する文書の長さの影響。 有効な値は 0~1 です。 デフォルト値: 0.75

      • lexical_algorithmパラメーターをvectorに設定すると、次のパラメーターをさらに設定できます。

        • lexical_use_hnsw: スパースベクトルにhnswインデックスを使用するかどうかを指定します。 有効な値: 1と0。 1の値は、HNSWインデックスが使用されることを指定する。 0の値は、HNSWインデックスが使用されないことを指定する。

        • 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の値を引いた値に等しくなります。

Output

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

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

例:

サンプルコマンド:

# Create a vector index that uses the HNSW algorithm and the Jaccard distance formula for vectors whose dimension is 2 and data type is BINARY. 
TVS.CREATEINDEX index_name0 2 HNSW JACCARD data_type BINARY

# Create a vector index that uses the HNSW algorithm and the Euclidean distance formula for vectors whose dimension is 2 and data type is FLOAT32. 
TVS.CREATEINDEX index_name1 2 HNSW L2 

# Create a vector index that uses the Flat Search algorithm and the inner product formula for vectors whose dimension is 2 and data type is FLOAT32. 
TVS.CREATEINDEX index_name2 2 FLAT IP 

# Create a vector index that uses the Flat Search algorithm and the Jaccard distance formula for vectors whose dimension is 2 and data type is BINARY. 
TVS.CREATEINDEX index_name3 2 FLAT JACCARD data_type BINARY

# Create a vector index that uses the HNSW algorithm, the BM25 full-text search algorithm, and the inner product formula for vectors whose dimension is 2 and data type is FLOAT32. Specify the productname field of the STRING type as an inverted index. 
TVS.CREATEINDEX index_name4 2 HNSW IP lexical_algorithm bm25 inverted_index_productname string

# Create a sparse vector that uses the HNSW algorithm and the inner product formula for vectors whose dimension is 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: ベクトルインデックスの名前。

Output

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

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

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

例:

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

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

サンプルコマンド (アルゴリズムパラメータをHNSWに設定):

TVS.GETINDEX my_index

サンプル出力:

 1) "lexical_term_count"   // The number of tokens in the full-text index. The value is of the INT data type. 
 2) "0"
 3) "lexical_record_count" // The number of documents in the full-text index. The value is of the INT data type. 
 4) "0"
 5) "lexical_algorithm"    // The full-text indexing algorithm. 
 6) "bm25"
 7) "auto_gc"              // Indicates whether automatic memory space reclamation is enabled for the index. This parameter is returned if you use the HNSW algorithm. 
 8) "1"
 9) "dimension"            // The dimension of the vectors. 
10) "2"
11) "attribute_data_size" // The amount of memory used by attribute information. Unit: bytes. 
12) "3720"
13) "distance_method" // The method that is used to calculate the distance between two vectors. 
14) "L2"
15) "data_type"            // The data type of the vectors. 
16) "FLOAT32"
17) "algorithm"            // The indexing algorithm. 
18) "HNSW"
19) "index_data_size"      // The amount of memory used by vectors. Unit: bytes. 
20) "105128040"
21) "M"                    // The maximum number of outgoing neighbors on each layer in a graph index structure. This parameter is returned if you use the HNSW algorithm. 
22) "16"
23) "data_count"           // The number of records or data points associated with a user. 
24) "3"
25) "current_record_count" // The total number of vectors. 
26) "3"
27) "ef_construct"         // The length of the dynamic array when you use the HNSW algorithm. 
28) "100"
29) "inverted_index_productname" // The inverted index information, including the field name, data type, and quantity. 
30) "field: productname, type: string, size: 1"
31) "delete_record_count" // The number of vectors to be deleted. 
32) "0"

TVS.DELINDEX

項目

説明

構文

TVS.DELINDEX index_name

時間の複雑さ

ここで、Nはベクトルインデックス内のキーの数を示す。

コマンド説明

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

パラメーター

  • index_name: ベクトルインデックスの名前。

Output

  • 操作が成功すると、ベクトルインデックスが削除され、値1が返されます。

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

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

例:

サンプルコマンド:

TVS.DELINDEX index_name0

サンプル出力:

 (integer) 1

TVS.SCANINDEX

項目

説明

構文

TVS.SCANINDEXカーソル [マッチパターン] [カウント]

時間の複雑さ

ここで、NはTairインスタンス内のベクトルインデックスの数を示す。

コマンド説明

Tairインスタンスで特定の条件を満たすベクトルインデックスをスキャンします。

パラメーター

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

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

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

Output

  • 操作が成功すると、配列が返されます。

    • 配列の要素1: 次のスキャンに使用されるカーソル。 スキャンが完了すると、値0が返されます。

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

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

例:

サンプルコマンド:

TVS.SCANINDEX 0

サンプル出力:

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

サンプル出力 (パターンパラメータを含む):

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はベクトルインデックス内のキーの数を示す。

コマンド説明

指定したベクトルインデックスにベクトルを挿入します。 ベクトルがすでに存在する場合、既存のデータは上書きされます。

パラメーター

  • index_name: ベクトルインデックスの名前。

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

  • attribute_keyおよびattribute_value: キーと値の形式で挿入するベクトル。

    • ベクトルを挿入するには、attribute_keyvectorに設定し、attribute_valuedimsパラメーターで指定されたベクトルインデックスと同じ次元のベクトル文字列に設定します。 例: ベクトル [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場所杭州

Output

  • 操作が成功すると、挿入されたキーの数が返されます。 既存のフィールドが更新されると、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

TVS.HGETALL

項目

説明

構文

TVS.HGETALL index_name key

時間の複雑さ

O(1)

コマンド説明

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

パラメーター

  • index_name: ベクトルインデックスの名前。

  • key: ベクターの主キー識別子。

Output

  • 操作が成功すると、keyのすべてのデータレコードが返されます。

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

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

例:

サンプルコマンド:

TVS.HGETALL index_name0 key0

サンプル出力:

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内の属性keyの値を照会します。

パラメーター

  • index_name: ベクトルインデックスの名前。

  • key: ベクターの主キー識別子。

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

Output

  • 操作が成功した場合、属性キーの値が返されます。

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

例:

サンプルコマンド:

TVS.HMGET index_name0 key0 create_time location VECTOR TEXT

サンプル出力:

1) "1800"
2) "[7,8]"
3) "TairVector is an in-house vector database service of Tair"

TVS.DEL

項目

説明

構文

TVS.DEL index_name key [key ...]

時間の複雑さ

O(1)

コマンド説明

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

パラメーター

  • index_name: ベクトルインデックスの名前。

  • key: ベクターの主キー識別子。 複数のキーを指定できます。

Output

  • 操作が成功すると、指定されたキーが削除され、削除されたキーの数が返されます。

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

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

例:

サンプルコマンド:

TVS.DEL index_name0 keyV

サンプル出力:

 (integer) 1

TVS.HDEL

項目

説明

構文

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

時間の複雑さ

O(1)

コマンド説明

指定されたベクトルの指定された属性を指定されたベクトルインデックスから削除します。

パラメーター

  • index_name: ベクトルインデックスの名前。

  • key: ベクターの主キー識別子。 複数のキーを指定できます。

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

Output

  • 操作が成功すると、指定された属性が削除され、削除された属性の数が返されます。

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

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

例:

サンプルコマンド:

TVS.HDEL index_name0 keyc VECTOR

サンプル出力:

 (integer) 1

TVS. スキャン

項目

説明

構文

TVS.SCAN index_name cursor [MATCH pattern] [COUNT count] [FILTER filter_string] [ベクトルベクトル] [MAX_DIST max_distance]

時間の複雑さ

ここで、Nはベクトルインデックス内のキーの数を示す。

コマンド説明

指定したベクターインデックスで特定の条件を満たすキーをスキャンします。

パラメーター

  • index_name: ベクトルインデックスの名前。

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

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

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

  • filter_string: フィルター条件。

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

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

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

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

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

Output

  • 操作が成功すると、配列が返されます。

    • 配列の要素1: 次のスキャンに使用されるカーソル。 スキャンが完了すると、値0が返されます。

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

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

例:

サンプルコマンド:

TVS.SCAN index_name0 0

サンプル出力:

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

TVS. ヒンクルビー

項目

説明

構文

TVS.HINCRBY index_name key attribute_key num

時間の複雑さ

O(1)

コマンド説明

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

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

パラメーター

  • index_name: ベクトルインデックスの名前。

  • key: ベクターの主キー識別子。

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

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

Output

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

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

例:

サンプルコマンド:

TVS.HINCRBY index_name0 key0 tv01 20 

サンプル出力:

(integer) 20

TVS.HINCRBYFLOAT

項目

説明

構文

TVS.HINCRBYFLOAT index_name key attribute_key num

時間の複雑さ

O(1)

コマンド説明

指定されたベクトルインデックスの指定されたキーの指定された属性キーの値を、指定された浮動小数点数 (num) だけ増加させます。

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

パラメーター

  • index_name: ベクトルインデックスの名前。

  • key: ベクターの主キー識別子。

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

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

Output

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

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

例:

サンプルコマンド:

TVS.HINCRBYFLOAT index_name0 key0 tv02 9.34

サンプル出力:

"9.34"

TVS.HPEXPIREAT

項目

説明

構文

TVS.HPEXPIREAT index_name keyミリ秒-timestamp

時間の複雑さ

O(1)

コマンド説明

指定されたベクトルインデックスの指定されたキーのミリ秒単位の絶対有効期限を指定します。

パラメーター

  • index_name: ベクトルインデックスの名前。

  • key: ベクターの主キー識別子。

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

Output

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

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

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

例:

サンプルコマンド:

TVS.HPEXPIREAT index_name0 key1 16914619090000

サンプル出力:

(integer) 1

TVS.HPEXPIRE

項目

説明

構文

TVS.HPEXPIRE index_name keyミリ秒-timestamp

時間の複雑さ

O(1)

コマンド説明

指定されたベクトルインデックスの指定されたキーのミリ秒単位の相対有効期限を指定します。

パラメーター

  • index_name: ベクトルインデックスの名前。

  • key: ベクターの主キー識別子。

  • ミリ秒-タイムスタンプ: 相対的な有効期限。 単位:ミリ秒。

Output

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

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

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

例:

サンプルコマンド:

TVS.HPEXPIRE index_name0 key1 1000

サンプル出力:

(integer) 1

TVS.HEXPIREAT

項目

説明

構文

TVS.HEXPIREAT index_name key timestamp

時間の複雑さ

O(1)

コマンド説明

指定されたベクトルインデックスの指定されたキーの秒単位の絶対有効期限を指定します。

パラメーター

  • index_name: ベクトルインデックスの名前。

  • key: ベクターの主キー識別子。

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

Output

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

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

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

例:

サンプルコマンド:

TVS.HPEXPIREAT index_name0 key2 1691466981

サンプル出力:

(integer) 1

TVS.HEXPIRE

項目

説明

構文

TVS.HEXPIRE index_name key timestamp

時間の複雑さ

O(1)

コマンド説明

指定されたベクトルインデックスの指定されたキーの秒単位の相対有効期限を指定します。

パラメーター

  • index_name: ベクトルインデックスの名前。

  • key: ベクターの主キー識別子。

  • timestamp: 相対的な有効期限。 単位は秒です。

Output

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

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

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

例:

サンプルコマンド:

TVS.HPEXPIREAT index_name0 key2 100

サンプル出力:

(integer) 1

TVS.HPTTL

項目

説明

構文

TVS.HPTTL index_name key

時間の複雑さ

O(1)

コマンド説明

指定されたベクトルインデックス内の指定されたキーのTTLを、ミリ秒の精度で照会します。

パラメーター

  • index_name: ベクトルインデックスの名前。

  • key: ベクターの主キー識別子。

Output

  • 指定されたキーが存在し、TTLが設定されている場合、TTLが返されます。

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

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

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

例:

サンプルコマンド:

TVS.HPTTL index_name0 key2

サンプル出力:

(integer) 65417

TVS.HTTL

項目

説明

構文

TVS.HTTL index_name key

時間の複雑さ

O(1)

コマンド説明

指定されたベクトルインデックス内の指定されたキーのTTLを2番目まで正確に照会します。

パラメーター

  • index_name: ベクトルインデックスの名前。

  • key: ベクターの主キー識別子。

Output

  • 指定されたキーが存在し、TTLが設定されている場合、TTLが返されます。

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

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

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

例:

サンプルコマンド:

TVS.HTTL index_name0 key2

サンプル出力:

(integer) 58

TVS.HPEXPIRETIME

項目

説明

構文

TVS.HPEXPIRETIME index_name key

時間の複雑さ

O(1)

コマンド説明

指定されたベクトルインデックス内の指定されたキーの絶対有効期限を、ミリ秒単位で照会します。

パラメーター

  • index_name: ベクトルインデックスの名前。

  • key: ベクターの主キー識別子。

Output

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

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

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

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

例:

サンプルコマンド:

TVS.HPEXPIRETIME index_name0 key2

サンプル出力:

(integer) 1691473985764

TVS.HEXPIRETIME

項目

説明

構文

TVS.HEXPIRETIME index_name key

時間の複雑さ

O(1)

コマンド説明

指定されたベクトルインデックス内の指定されたキーの絶対有効期限を、2番目まで正確に照会します。

パラメーター

  • index_name: ベクトルインデックスの名前。

  • key: ベクターの主キー識別子。

Output

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

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

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

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

例:

サンプルコマンド:

TVS.HEXPIRETIME index_name0 key2

サンプル出力:

(integer) 1691473985

TVS.KNNSEARCH

項目

説明

構文

TVS.KNNSEARCH index_name topNベクトル [filter_string] [param_key param_value]

時間の複雑さ

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

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

Nは、ベクトルインデックス内のキーの数を示す。

コマンド説明

指定されたベクトルインデックス内の指定されたベクトルの最近傍ベクトルを照会します。 最大10,000のベクトルを返すことができます。

パラメーター

  • index_name: ベクトルインデックスの名前。

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

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

  • filter_string: フィルター条件。

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

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

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

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

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

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

    • MAX_DIST: 許容される最大距離。FLOATタイプでなければなりません。 指定されたベクトルと隣接ベクトルとの間の距離がこのパラメータの値よりも大きい場合、隣接ベクトルのキーは除外され、検索結果から除外されます。

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

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

    • デフォルトでは、システムはk-nearest neighbor (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パラメーターは、転置インデックスに基づいてフィルタリングできるレコードの最大数を指定するためにも使用できます。 デフォルトの値は 10,000 です。 PreFilterポリシーで、この初期スカラーフィルタリング段階で処理されたレコード数がivf_filter_count値を超えると、システムは自動的にPostFilterポリシーに低下します。

      説明

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

Output

  • 操作が成功した場合、隣接ベクトルのキーは、指定されたベクトルまでの距離の昇順で返されます。

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

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

例:

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

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ベクトル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: クエリする最も近い隣接ベクトル。 ハイブリッドインデックス方法を使用してフルテキスト検索のみを実行する場合は、ベクトルフィールドを空の文字列 ("") に設定できます。

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

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

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

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

Output

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

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

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

例:

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

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.GETDISTANCEindex_name ベクトル key_count キー[キー, ...] [TOPN]topN] [フィルター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 value] 。

  • フィルター: フィルター条件。

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

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

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

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

Output

  • 操作が成功した場合、指定された各ベクトルに対する隣接ベクトルの距離が、キーの順序で返されます。 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: クエリする最も近い隣接ベクトル。 ハイブリッドインデックス方法を使用してフルテキスト検索のみを実行する場合は、ベクトルフィールドを空の文字列 ("") に設定できます。

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

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

Output

  • 操作が成功した場合、結果は配列で返されます。 各配列には、指定された各ベクトルまでの距離の昇順に隣接ベクトルのキーが含まれています。

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

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

例:

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

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ベクトル [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

  • vector: クエリする最も近い隣接ベクトル。

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

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

Output

  • 操作が成功した場合、隣接ベクトルのキーは、指定されたベクトルまでの距離の昇順で返されます。

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

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

例:

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

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"

TVS.MINDEXKNNSEARCHFIELD

項目

説明

構文

TVS.MINDEXKNNSEARCHFIELD index_count index_name [index_name ...] topNベクトル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

  • vector: クエリする最も近い隣接ベクトル。

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

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

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

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

Output

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

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

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

例:

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

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 ~ 10000

  • vector_count: 指定されたベクトルの数。

  • vector: クエリする最も近い隣接ベクトル。

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

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

Output

  • 操作が成功した場合、結果は配列で返されます。 各配列には、指定された各ベクトルまでの距離の昇順に隣接ベクトルのキーが含まれています。

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

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

例:

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

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"