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

Tair (Redis® OSS-Compatible):ベクトル グローバルインデックス

最終更新日:May 08, 2026

プロキシモードのクラスターでは、TairVector がデータインデックス (TairVectorIndex) 上に構築されたグローバルインデックス (TairVectorGlobalIndex) を提供します。

概要

データインデックスに関連付けられると、グローバルインデックスは自動的に負荷分散を処理します。グローバルインデックスにデータを書き込むと、Tair はデータをクラスター内の異なるシャードにわたるデータインデックスに均等に分散します。クエリ実行時にも、グローバルインデックスは各データインデックスからの結果を集約し、最終的な統合結果を返します。グローバルインデックスのデータ構造は次のとおりです。

グローバルインデックスを作成後、TVS.EXPANDINDEXGLOBAL コマンドを使用して対応するデータインデックスを直接作成できます。または、TVS.IMPORTINDEXGLOBAL コマンドを使用して既存のデータインデックスをグローバルインデックスに関連付けることもできます。これらのデータインデックスは TVS.CREATEINDEX コマンドで作成済みである必要があり、そのメタデータはグローバルインデックスのものと一致している必要があります。関連付け後は、グローバルインデックスのみを操作すればよくなります。

データインデックスをグローバルインデックスから関連付け解除することもできます。

前提条件

  • インスタンスは DRAM ベース(Redis 6.0 以降と互換)である必要があります。

  • インスタンスはプロキシモードのクラスターインスタンスであり、プロキシバージョンが 7.0.10 以降である必要があります。

  • TairVector グローバルインデックス機能が有効になっている必要があります。この機能を有効にするには、globalvectorindex_enabled インスタンスパラメーターを 1 に設定してください。詳細については、「パラメーターの設定」をご参照ください。

注意事項

  • TVS.CREATEINDEXGLOBALTVS.EXPANDINDEXGLOBAL、または TVS.IMPORTINDEXGLOBAL コマンドを実行した後、グローバルインデックスは通常すぐに利用可能になります。ただし、ネットワーク遅延やバックグラウンド同期により、最大 30 秒程度の一時的な遅延が発生する場合があります。

  • データインデックスをグローバルインデックスから関連付け解除する前に削除しないでください。そうしないと、システムは ERR there are vector indexes that don't exist, please check and retry エラーを返します。

コマンド

表 1. TairVector グローバルインデックスコマンド

タイプ

コマンド

構文

説明

インデックス操作

TVS.CREATEINDEXGLOBAL

TVS.CREATEINDEXGLOBAL global_index dims algorithm distance_method [algo_param_key alog_param_value] ...

グローバルインデックスを作成し、インデックス構築およびクエリ用のアルゴリズムと距離関数を指定します。

TVS.EXPANDINDEXGLOBAL

TVS.EXPANDINDEXGLOBAL global_index num

グローバルインデックス内にデータインデックスを作成します。

TVS.IMPORTINDEXGLOBAL

TVS.IMPORTINDEXGLOBAL global_index sub_index

既存のデータインデックスをグローバルインデックスにバインドします。既存のデータインデックスのメタデータは、グローバルインデックスのものと一致している必要があります。

TVS.LISTINDEXGLOBAL

TVS.LISTINDEXGLOBAL num [global_index] [global_index] ...

1 つ以上のグローバルインデックスに関する情報を一覧表示します。

TVS.DELINDEXGLOBAL

TVS.DELINDEXGLOBAL global_index [sub_index] ...

グローバルインデックスを 1 つ以上のデータインデックスから関連付け解除します。データインデックスを指定しない場合、このコマンドはグローバルインデックスを削除し、関連するすべてのデータインデックスの関連付けを解除します。

ベクトルデータ操作

TVS.HSETGLOBAL

TVS.HSETGLOBAL global_index key attribute_key attribute_value [attribute_key attribute_value] ...

データレコード (key で識別) をグローバルインデックスに挿入します。Tair は、データバランスを確保するためにキーを適切なデータインデックスに自動的に書き込みます。

TVS.HGETALLGLOBAL

TVS.HGETALLGLOBAL global_index key

グローバルインデックス内の指定された key のレコードについて、すべての属性と値を返します。

TVS.HMGETGLOBAL

TVS.HMGETGLOBAL global_index key attribute_key [attribute_key ...]

グローバルインデックス内の key について、1 つ以上の指定された attribute_key の値を返します。

TVS.DELGLOBAL

TVS.DELGLOBAL global_index key [key ...]

フルインデックスから key で指定されたデータレコードを削除します。

TVS.HDELGLOBAL

TVS.HDELGLOBAL global_index key attribute_key [attribute_key ...]

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

TVS.SCANGLOBAL

TVS.SCANGLOBAL global_index cursor [MATCH pattern] [COUNT count] [FILTER filter_string] [VECTOR vector] [MAX_DIST max_distance]

グローバルインデックス内で、指定された条件 (key) を満たすデータレコードをスキャンします。

ベクトル最近傍検索

TVS.KNNSEARCHGLOBAL

TVS.KNNSEARCHGLOBAL global_index topN vector [filter_string] [param_key param_value]

グローバルインデックス内で指定されたベクトルの最近傍検索を実行し、最大 topN 件の結果を返します。

TVS.KNNSEARCHFIELDGLOBAL

TVS.KNNSEARCHFIELDGLOBAL global_index topN vector field_count field_name [field_name ...] [filter_string] [param_key param_value]

グローバルインデックス内で指定されたベクトルの最近傍を検索します。検索ロジックは TVS.KNNSEARCHGLOBAL と同じですが、このコマンドではタグ属性も返すことができます。

説明

このトピックで使用されているコマンド構文の規則は次のとおりです。

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

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

  • [オプション]: 角括弧で囲まれたパラメーターは省略可能であることを示します。角括弧で囲まれていないパラメーターは必須です。

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

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

TVS.CREATEINDEXGLOBAL

カテゴリ

説明

構文

TVS.CREATEINDEXGLOBAL global_index dims algorithm distance_method [algo_param_key algo_param_value] ...

時間計算量

O(1)

コマンドの説明

グローバルインデックスを作成し、インデックス構築およびクエリ用のアルゴリズムと距離関数を指定します。

グローバルインデックスは TVS.DELINDEXGLOBAL コマンドでのみ削除できます。

オプション

  • global_index: グローバルインデックスの名前。

  • dims: ベクトルディメンション。1 ~ 32,768 の整数。インデックス内のすべてのベクトルはこのディメンションを持つ必要があります。

  • algorithm: インデックス構築およびクエリに使用するアルゴリズム。有効な値:

    • FLAT: 別途インデックスを構築せずに力まかせ探索を実行します。このアルゴリズムは、10,000 件未満のエントリーを持つ小規模データセットに適しています。

    • HNSW: HNSW グラフ構造を使用してインデックスを構築およびクエリします。このアルゴリズムは大規模データセットに適しています。

  • distance_method: ベクトル距離を計算するための距離関数。有効な値:

    • L2: 二乗ユークリッド距離。

    • IP: 内積。距離は 1 - 内積 として計算されます。

    • COSINE: コサイン距離。距離は 1 - コサイン類似度 として計算されます。COSINE を使用すると、挿入されたベクトルが単位ベクトル (L2 正規化) に正規化されます。その結果、クエリによって返されるベクトルは元のベクトルと異なる場合があります。

    • JACCARD: ジャカード距離。距離は 1 - ジャカード係数 として計算されます。この距離関数を使用するには、data_typeBINARY に設定する必要があります。

  • algo_param_key および algo_param_value:

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

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

      • FLOAT16: 2 バイトの半精度浮動小数点数 (IEEE 754-2008 標準)。このデータ型は精度を犠牲にしてベクトルストレージスペースを削減します。FLOAT16 の値の範囲は [-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 以降である必要があります。有効にすると、マーク付き削除によって削除されたベクトルの領域が自動的に回収され、メモリ使用量が削減されますが、最近傍クエリのパフォーマンスに影響を与える可能性があります。メモリに敏感なシナリオで推奨されます。

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

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

        構文は inverted_index_<field_name> int|long|float|double|string です。これにより、field_name フィールド上に転置インデックスが作成されます。サポートされるデータ型は int、long、float、double、string です。field_name およびデータ型キーワードは小文字である必要があります。

        たとえば、String 型の productname フィールド上に転置インデックスを作成するには、inverted_index_productname string を使用します。

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

        • bm25: BM25 (Okapi BM25) アルゴリズム。フルテキスト検索に適しています。

          • TVS.HSET を使用してデータを書き込む際、attribute_keyTEXT キーワード (大文字が必要) に設定すると、対応する attribute_value に対して自動的にフルテキストインデックスが構築されます。

          • Tair ベクトルサービスは、提供された生テキストからこのインデックスを構築します。

        • vector: ベクトルアルゴリズム。元のテキスト (埋め込み) をエンコードし、疎ベクトルを渡す必要があります。データ形式は "[[2,0.221],[42,09688],...]" で、キーは Indices (型 uint32_t)、値はそのインデックスの語頻度概要 (型 Float) です。

      • lexical_algorithmbm25 に設定した場合、analyzer および k1b の重みも構成できます。

        • analyzer: アナライザ。現在、jieba (デフォルト) および ik_smart がサポートされています。

        • k1: BM25 アルゴリズムにおける term frequency の飽和を制御します。デフォルト値は 1.2 で、値は 0 より大きくなければなりません。

        • b: BM25 アルゴリズムにおけるドキュメント長の影響を制御します。デフォルト値は 0.75、有効範囲は [0, 1] です。

      • hybrid_ratio: クエリ時のベクトル検索のデフォルトの重み。デフォルト値は 0.5、有効範囲は [0, 1] です。値は浮動小数点数である必要があります。フルテキスト検索の重みは 1-hybrid_ratio です。

戻り値

  • 成功時は OK を返します。

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

コマンド例:

# 2 ディメンション、ジャカード距離、BINARY データ型の HNSW インデックスを作成します。
TVS.CREATEINDEXGLOBAL index_name0 2 HNSW JACCARD data_type BINARY

# ベクトルディメンション 2、HNSW アルゴリズム、L2 距離関数、FLOAT32 データ型のベクトルインデックスを作成します。
TVS.CREATEINDEXGLOBAL index_name1 2 HNSW L2 

# ベクトルディメンション 2、FLAT アルゴリズム、IP 距離関数、FLOAT32 データ型のベクトルインデックスを作成します。
TVS.CREATEINDEXGLOBAL index_name2 2 FLAT IP 

# ベクトルディメンション 2、FLAT アルゴリズム、ジャカード距離関数、BINARY データ型のベクトルインデックスを作成します。
TVS.CREATEINDEXGLOBAL index_name3 2 FLAT JACCARD data_type BINARY

# 2 ディメンション、IP 距離のハイブリッド HNSW インデックスを作成し、'productname' 文字列フィールドに bm25 フルテキスト検索を追加します。
TVS.CREATEINDEXGLOBAL index_name4 2 HNSW IP lexical_algorithm bm25 inverted_index_productname string

すべての例で次の結果が返されます。

OK

TVS.EXPANDINDEXGLOBAL

項目

説明

構文

TVS.EXPANDINDEXGLOBAL global_index num

時間計算量

O(1)

コマンドの説明

グローバルインデックス内にデータインデックスを作成します。

作成する新しいデータインデックスの数を指定すると、Tair は自動的にそれらを作成および命名し、シャード間で均等に分散します。データインデックスのメタデータはグローバルインデックスのものと同一です。データインデックスはグローバルインデックスに関連付けられますが、Tair 内で独立して保存されます。

説明

グローバルインデックス内のデータインデックス数をインスタンスのシャード数に合わせることを推奨します。たとえば、Tair インスタンスに 3 つのシャードがあり、3 つのデータインデックスを作成する場合、Tair は各シャードに 1 つのデータインデックスを作成し、自動負荷分散を実現します。

パラメーター

  • global_index: グローバルインデックスの名前。

  • num: 作成するデータインデックスの数。

戻り値

  • 成功時は OK を返します。

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

例のコマンド:

TVS.EXPANDINDEXGLOBAL index_name0 3

例の出力:

OK

TVS.IMPORTINDEXGLOBAL

項目

説明

構文

TVS.IMPORTINDEXGLOBAL global_index sub_index

時間計算量

O(1)

コマンドの説明

既存のデータインデックスをグローバルインデックスにバインドします。既存のデータインデックスのメタデータは、グローバルインデックスのものと一致している必要があります。

パラメーター

  • global_index: グローバルインデックスの名前。

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

出力

  • コマンドが成功した場合、OK を返します。

  • データインデックスのメタデータがグローバルインデックスと一致しない場合、コマンドは (error)ERR two indices are not suitable を返します。

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

例のコマンド:

TVS.IMPORTINDEXGLOBAL index_name0 testvector

例の出力:

OK

TVS.LISTINDEXGLOBAL

カテゴリ

説明

構文

TVS.LISTINDEXGLOBAL num [global_index] [global_index] ...

時間計算量

O(1)

コマンドの説明

1 つ以上のグローバルインデックスに関する情報を一覧表示します。

パラメーター

  • num: 一覧表示するグローバルインデックスの数。0 を指定すると、すべてのグローバルインデックスを一覧表示します。

  • global_index: グローバルインデックスの名前。

戻り値

  • 各文字列がグローバルインデックスを記述する JSON オブジェクトである文字列の配列。

  • コマンドが失敗した場合、エラーメッセージ。

コマンド:

TVS.LISTINDEXGLOBAL 2 index_name0 index_name4

出力:

1) "{\"dimension\":\"2\",\"algorithm\":\"HNSW\",\"distance_method\":\"JACCARD\",\"parameters\":[\"data_type\",\"BINARY\"],\"sub_index_list\":[\"index_name0_sub_1719912517_2\",\"index_name0_sub_1719912517_3\",\"index_name0_sub_1719912517_4\"]}"
2) "{\"dimension\":\"2\",\"algorithm\":\"HNSW\",\"distance_method\":\"IP\",\"parameters\":[\"lexical_algorithm\",\"bm25\",\"inverted_index_productname\",\"string\"],\"sub_index_list\":[\"index_name4_sub_1719986971_2\",\"index_name4_sub_1719986971_0\",\"index_name4_sub_1719986971_1\"]}"

TVS.DELINDEXGLOBAL

項目

説明

構文

TVS.DELINDEXGLOBAL global_index [sub_index] ...

時間計算量

O(1)

コマンドの説明

グローバルインデックスを 1 つ以上のデータインデックスから関連付け解除します。データインデックスを指定しない場合、このコマンドはグローバルインデックスを削除し、関連するすべてのデータインデックスの関連付けを解除します。

説明

このコマンドはデータインデックスを削除しません。データインデックスを削除するには、TVS.DELINDEX コマンドを実行してください。

パラメーター

  • global_index: グローバルインデックスの名前。

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

戻り値

  • コマンドが成功した場合、整数を返します。

    • 0: 指定されたデータインデックスがグローバルインデックスから関連付け解除されました。

    • 1: グローバルインデックスが削除されました。

  • コマンドが失敗した場合、エラーメッセージを返します。

コマンド例:

TVS.DELINDEXGLOBAL index_name0 index_name0_sub_1720000607_0 index_name0_sub_1720000607_1

例の出力:

(integer) 0

TVS.HSETGLOBAL

カテゴリ

説明

構文

TVS.HSETGLOBAL global_index key attribute_key attribute_value [attribute_key attribute_value] ...

時間計算量

ベクトルが作成または更新されない場合は O(1)。それ以外の場合は、O(log(N))。ここで N はベクトルインデックス内のキー数です。

コマンドの説明

データレコード (key で識別) をグローバルインデックスに挿入します。Tair は、データバランスを確保するためにキーを適切なデータインデックスに自動的に書き込みます。

レコードがすでに存在する場合、上書きされます。

パラメーター

  • global_index: グローバルインデックスの名前。

  • key: レコードのプライマリキー。レコードは TVS.DELGLOBAL コマンドで削除できます。

  • 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.HSETGLOBAL my_index key0 VECTOR [5,6] creation_time 1750 productname "Aliyun"

例の出力:

(integer) 3

TVS.HGETALLGLOBAL

項目

説明

構文

TVS.HGETALLGLOBAL global_index key

時間計算量

O(1) * M。ここで M はデータインデックスの数です。

コマンドの説明

グローバルインデックス内の指定された key のレコードについて、すべての属性と値を返します。

パラメーター

  • global_index: グローバルインデックスの名前。

  • key: レコードのプライマリキー。

出力

  • 成功時は、指定された key の属性と値の配列を返します。

  • 指定されたグローバルインデックスまたは key が存在しない場合、(empty array) を返します。

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

例のコマンド:

TVS.HGETALLGLOBAL my_index key0

例の出力:

1) "VECTOR"
2) "[5,6]"
3) "productname"
4) "Aliyun"
5) "creation_time"
6) "1750"

TVS.HMGETGLOBAL

項目

説明

構文

TVS.HMGETGLOBAL global_index key attribute_key [attribute_key ...]

時間計算量

O(1) * M。ここで M は属性キーの数です。

コマンドの説明

グローバルインデックス内の key について、1 つ以上の指定された attribute_key の値を返します。

パラメーター

  • global_index: グローバルインデックスの名前。

  • key: レコードのプライマリキー。

  • attribute_key: 取得する 1 つ以上の属性キー。ベクトルデータを取得するには、VECTOR キーワード (大文字が必要) を指定します。フルテキストインデックスから生テキストデータを取得するには、TEXT キーワード (大文字が必要) を指定します。

出力

  • コマンドが成功した場合、要求された順序で指定された attribute_key の値の配列を返します。

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

サンプルコマンド:

TVS.HMGETGLOBAL index_name0 key0 create_time VECTOR

サンプル出力:

1) "1800"
2) "[7,8]"

TVS.DELGLOBAL

項目

説明

構文

TVS.DELGLOBAL global_index key [key ...]

時間計算量

O(1)

コマンドの説明

フルインデックスから key で指定されたデータレコードを削除します。

パラメーター

  • global_index: グローバルインデックスの名前。

  • key: 削除するデータレコードのプライマリキー。1 つ以上のキーを指定できます。

戻り値

  • 正常に実行された場合: 指定されたデータレコード (key) を削除し、削除された key の数を返します。

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

  • その他の失敗時には、エラーメッセージを返します。

例のコマンド:

TVS.DELGLOBAL my_index key0 key1

例の出力:

 (integer) 2

TVS.HDELGLOBAL

カテゴリ

説明

構文

TVS.HDELGLOBAL global_index key attribute_key [attribute_key ...]

時間計算量

O(1)

コマンドの説明

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

パラメーター

  • global_index: グローバルインデックスの名前。

  • key: レコードのプライマリキー。

  • attribute_key: 削除する属性キー。複数の属性キーを指定できます。ベクトルデータを削除するには、VECTOR キーワード (大文字が必要) を指定します。フルテキストデータを削除するには、TEXT キーワード (大文字が必要) を指定します。

出力

  • 成功時は、削除された attribute_key の数を返します。

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

  • それ以外の場合は、エラーを返します。

例のコマンド:

TVS.HDELGLOBAL index_name0 keyc VECTOR

例の出力:

 (integer) 1

TVS.SCANGLOBAL

項目

説明

構文

TVS.SCANGLOBAL global_index cursor [MATCH pattern] [COUNT count] [FILTER filter_string] [VECTOR vector] [MAX_DIST max_distance]

時間計算量

O(N)。ここで N はグローバルインデックス内のキー数です。

コマンドの説明

グローバルインデックス内で、指定された条件 (key) を満たすデータレコードをスキャンします。

1 回のスキャンで、Tair は 1 つのデータシャードからのみ結果を返します。

パラメーター

  • global_index: グローバルインデックスの名前。

  • cursor: 現在のスキャンのカーソル。初期カーソルは 0 です。

  • pattern: キー名に対して照合する glob スタイルのパターン。

  • count: 各スキャンで返すキー数のヒントワード。デフォルト値は 10 です。このコマンドは、各反復で count で指定された正確なキー数が返されることを保証しません。

  • filter_string: フィルター条件。

    • サポートされる演算子には +、-、*、/、<、>、!=、()、&&、|| が含まれます。文字列値はエスケープされた二重引用符で囲む必要があります (例: create_time > 1663637425 && location == \"Hangzhou\")。辞書式文字列比較はサポートされていません。

    • 演算子はオペランドからスペースで区切る必要があります (例: "creation_time > 1735")。

    • flag == true のようなブール値比較はサポートされていません。代わりに、ブール値を文字列として渡します (例: flag == \"true\")。

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

  • max_distance: 最大距離しきい値。このパラメーターは vector パラメーターと併用する必要があります。両方を指定すると、クエリ vector との距離が max_distance 未満の結果のみが返されます。

戻り値

  • 成功時は、2 つの要素を持つ配列を返します。

    • 最初の要素は次のスキャンのカーソル。返されたカーソルが 0 の場合、スキャンが完了したことを示します。

    • 2 番目の要素: このクエリのデータレコード (key) の名前。

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

コマンド例:

TVS.SCANGLOBAL index_name0 0

返却例:

1) "72057594037927936"
2) 1) "key2"
   2) "key1"

TVS.KNNSEARCHGLOBAL

カテゴリ

説明

構文

TVS.KNNSEARCHGLOBAL global_index topN vector [filter_string] [param_key param_value]

時間計算量

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

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

N は各データインデックス内のキー数、M はデータインデックスの数です。

コマンドの説明

グローバルインデックス内で指定されたベクトルの最近傍検索を実行し、最大 topN 件の結果を返します。

たとえば、topN 件の結果をクエリする場合、Tair はまず各データインデックスから topN 件の結果を取得します。この時点で、最大 topN × データインデックス数 件の結果が得られます。Tair は次に結果を集約およびソートし、最終的に topN 件の結果を返します。

オプション

  • global_index: グローバルインデックスの名前。

  • topN: 返す結果の数。値は [1,10000] の範囲内である必要があります。

  • vector: クエリベクトル。ハイブリッドインデックスでフルテキスト検索のみを実行するには、空文字列 ("") を渡します。

  • filter_string: フィルター文字列。

    • +-*/<>!=()&&|| のような演算子をサポートします。文字列比較はサポートされていません。フィルターで文字列値を使用するには、エスケープ文字 (\) を使用します。例: "create_time > 1663637425 && location == \"Hangzhou\""

    • 演算子とオペランドの間にはスペースを空けてください。例: "creation_time > 1735"

    • flag == true のようなブール値との比較はサポートされていません。代わりに、値を文字列として渡します。例: flag == \"true\"

  • param_key および param_value: クエリの実行時パラメーター。

    • ef_search: クエリ中の動的リストの長さ。デフォルト値は 100、有効範囲は [1,1000] です。値を大きくするとクエリ精度が向上しますが、パフォーマンスオーバーヘッドも増加します。このパラメーターは HNSW アルゴリズムに固有です。

    • MAX_DIST: 最大距離しきい値。浮動小数点数で指定します。キーのクエリベクトルからの距離がこの値を超える場合、そのキーは返されません。

    • TEXT: ハイブリッド検索のクエリ用テキスト。テキストまたはベクトルデータを渡すことができます。このパラメーターを指定しない場合、または空文字列 ("") を渡す場合、コマンドはフルテキスト検索ではなくベクトル検索のみを実行します。

    • hybrid_ratio: 現在のクエリにおけるベクトル検索の重み。デフォルト値は TVS.CREATEINDEX で設定された hybrid_ratio 値です。値は [0,1] の範囲内の浮動小数点数である必要があります。フルテキスト検索の重みは 1-hybrid_ratio です。

    • デフォルトでは、システムは PostFilter ポリシーを使用し、スカラーのフィルタリングの前に K 最近傍 (KNN) ベクトル検索を実行します。

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

        PostFilter ポリシーでは、十分な結果が見つかる前にフィルター処理で除外されたレコード数が vector_filter_count を超えると、ベクトル検索の走査が終了します。

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

        PostFilter ポリシーでは、十分な結果が見つかる前にフィルター処理で除外されたレコード数が fulltext_filter_count を超えると、フルテキスト検索の走査が終了します。

      • PreFilter ポリシーを使用するには、KNN ベクトル検索の前に転置インデックスでスカラーのフィルタリングを実行するため、クエリに search_policy scala パラメーターを追加します。

        ivf_filter_count パラメーターを指定して、転置インデックスからフィルター処理するレコードの最大数を設定することもできます。デフォルト値は 10000 です。PreFilter ポリシーでは、転置インデックスのフィルターを通過したレコード数が ivf_filter_count を超える場合、システムは自動的に PostFilter ポリシーにフォールバックします。

      説明

      ほとんどの場合、デフォルトパラメーターにより低遅延を維持しながら精度が確保されます。特定のリクエストに対してこれらのパラメーターを調整できますが、値を大きくするとクエリ遅延が増加する可能性があることに注意してください。

戻り値

  • コマンドが成功した場合、クエリベクトルへの距離が近い順に並べられた最近傍 key とその距離の配列を返します。

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

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

まず次のコマンドを実行します。

TVS.CREATEINDEXGLOBAL my_global_index 2 HNSW L2 inverted_index_productname string
TVS.EXPANDINDEXGLOBAL my_global_index 3
TVS.HSETGLOBAL my_global_index key0 VECTOR [1,2] creation_time 1730 productname "Aliyun"
TVS.HSETGLOBAL my_global_index key1 VECTOR [3,4] creation_time 1740 productname "other"
TVS.HSETGLOBAL my_global_index key2 VECTOR [5,6] creation_time 1750 productname "Aliyun"

サンプルコマンド 1:

TVS.KNNSEARCHGLOBAL my_global_index 2 [3,3.1] "creation_time > 1735"

サンプル出力 1:

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

サンプルコマンド 2:

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

サンプル出力 2:

1) "key2"
2) "12.410000801086426"

TVS.KNNSEARCHFIELDGLOBAL

項目

説明

構文

TVS.KNNSEARCHFIELDGLOBAL global_index topN vector field_count field_name [field_name ...] [filter_string] [param_key param_value]

時間計算量

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

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

N はデータインデックス内のキー数、M はデータインデックスの数です。

コマンドの説明

グローバルインデックス内で指定されたベクトルの最近傍を検索します。検索ロジックは TVS.KNNSEARCHGLOBAL と同じですが、このコマンドではタグ属性も返すことができます。

オプション

  • global_index: グローバルインデックスの名前。

  • topN: 返す結果の数。値は 1 ~ 10,000 の整数である必要があります。

  • vector: 最近傍検索用のベクトル。ハイブリッドインデックスでフルテキスト検索のみを実行するには、このパラメーターに空文字列 ("") を渡します。

  • field_count: 返すタグ属性の数。すべてのタグ属性を返すには、field_count を 0 に設定します。

  • field_name: タグ属性の名前。field_name パラメーターの数は field_count の値と一致する必要があります。

  • filter_string: フィルター文字列。

    • +-*/<>!=()&&|| のような演算子をサポートします。文字列比較はサポートされていません。フィルターで文字列値を使用するには、エスケープ文字 (\) を使用します。例: "create_time > 1663637425 && location == \"Hangzhou\""

    • 演算子とオペランドの間にはスペースを空けてください。例: "creation_time > 1735"

    • flag == true のようなブール値との比較はサポートされていません。代わりに、値を文字列として渡します。例: flag == \"true\"

  • param_key および param_value: クエリの実行時パラメーター。

    • ef_search: クエリ中の動的リストの長さ。デフォルト値は 100、有効範囲は [1,1000] です。値を大きくするとクエリ精度が向上しますが、パフォーマンスオーバーヘッドも増加します。このパラメーターは HNSW アルゴリズムに固有です。

    • MAX_DIST: 最大距離しきい値。浮動小数点数で指定します。キーのクエリベクトルからの距離がこの値を超える場合、そのキーは返されません。

    • TEXT: ハイブリッド検索のクエリ用テキスト。テキストまたはベクトルデータを渡すことができます。このパラメーターを指定しない場合、または空文字列 ("") を渡す場合、コマンドはフルテキスト検索ではなくベクトル検索のみを実行します。

    • hybrid_ratio: 現在のクエリにおけるベクトル検索の重み。デフォルト値は TVS.CREATEINDEX で設定された hybrid_ratio 値です。値は [0,1] の範囲内の浮動小数点数である必要があります。フルテキスト検索の重みは 1-hybrid_ratio です。

    • デフォルトでは、システムは PostFilter ポリシーを使用し、スカラーのフィルタリングの前に K 最近傍 (KNN) ベクトル検索を実行します。

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

        PostFilter ポリシーでは、十分な結果が見つかる前にフィルター処理で除外されたレコード数が vector_filter_count を超えると、ベクトル検索の走査が終了します。

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

        PostFilter ポリシーでは、十分な結果が見つかる前にフィルター処理で除外されたレコード数が fulltext_filter_count を超えると、フルテキスト検索の走査が終了します。

      • PreFilter ポリシーを使用するには、KNN ベクトル検索の前に転置インデックスでスカラーのフィルタリングを実行するため、クエリに search_policy scala パラメーターを追加します。

        ivf_filter_count パラメーターを指定して、転置インデックスからフィルター処理するレコードの最大数を設定することもできます。デフォルト値は 10000 です。PreFilter ポリシーでは、転置インデックスのフィルターを通過したレコード数が ivf_filter_count を超える場合、システムは自動的に PostFilter ポリシーにフォールバックします。

      説明

      ほとんどの場合、デフォルトパラメーターにより低遅延を維持しながら精度が確保されます。特定のリクエストに対してこれらのパラメーターを調整できますが、値を大きくするとクエリ遅延が増加する可能性があることに注意してください。

戻り値

  • コマンドが成功した場合、クエリベクトルへの距離が近い順に並べられた最近傍 key、その距離、および対応するタグ属性のキーと値のペアを返します。

  • 指定されたグローバルインデックスが存在しない場合、(empty array) を返します。

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

まず次のコマンドを実行します。

TVS.CREATEINDEXGLOBAL my_global_index 2 HNSW L2 inverted_index_productname string
TVS.EXPANDINDEXGLOBAL my_global_index 3
TVS.HSETGLOBAL my_global_index key0 VECTOR [1,2] creation_time 1730 productname "Aliyun"
TVS.HSETGLOBAL my_global_index key1 VECTOR [3,4] creation_time 1740 productname "other"
TVS.HSETGLOBAL my_global_index key2 VECTOR [5,6] creation_time 1750 productname "Aliyun"

例のコマンド:

TVS.KNNSEARCHFIELDGLOBAL my_global_index 2 [3,3.1] 1 VECTOR "creation_time > 1735"

例の出力:

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