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

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

最終更新日:Jan 21, 2025

TairVectorは、プロキシモードのクラスターインスタンスのデータインデックス (TairVectorIndex) に基づくグローバルインデックス (TairVectorGlobalIndex) を提供します。

概要

グローバルインデックスがデータインデックスに関連付けられた後、グローバルインデックスは自動的に負荷分散を実装できます。 グローバルインデックスにデータを書き込んだ後、Tairはクラスターインスタンス内の異なるシャード間でデータを均等に分散します。 クエリ中に、グローバルインデックスも各データインデックスからクエリ結果を自動的に集約し、最終結果を返します。 グローバルインデックスのデータ構造を次の図に示します。

グローバルインデックスを作成したら、TVS.EXPANDINDEXGLOBALコマンドを使用して、関連するデータインデックスを作成できます。 または、TVS.IMPORTINDEXGLOBALコマンドを使用して、既存のデータインデックスをグローバルインデックスに関連付けることもできます。 これらの既存のデータインデックスは、TVS.CREATEINDEXコマンドを使用して作成され、グローバルインデックスと同じメタデータを共有します。 データインデックスがグローバルインデックスに関連付けられた後、グローバルインデックスに対してのみ操作を実行する必要があります。

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

前提条件

  • インスタンスは、Redis 6.0以降と互換性のあるTair DRAMベースのインスタンスです。 詳細については、「DRAMベースのインスタンス」をご参照ください。

  • インスタンスはプロキシモードのクラスターインスタンスで、プロキシノードのバージョンは7.0.10以降です。

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

注意事項

  • ほとんどの場合、グローバルインデックスは、TVS.CREATEINDEXGLOBALTVS.EXPANDINDEXGLOBAL、およびTVS.IMPORTINDEXGLOBALコマンドが実行された直後に有効になります。 ただし、ネットワーク遅延やバックグラウンド同期などの要因により、グローバルインデックスがすぐに有効にならない場合があります。 グローバルインデックスが有効になるまでの最大時間は30秒を超えません。

  • グローバルインデックスからの関連付けを解除する前に、データインデックスを直接削除しないでください。 それ以外の場合、ERR存在しないベクトルインデックスがあります。チェックして再試行してくださいエラーが返されます。

サポートされるコマンド

表 1. TairVectorGlobalIndexコマンド

タイプ

コマンド

構文

説明

インデックス操作

TVS.CREATEINDEXGLOBAL

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

グローバルインデックスを作成します。 このコマンドを使用すると、インデックスの作成とクエリの実行に使用する特定のアルゴリズムと距離関数を指定できます。

TVS.EXPANDINDEXGLOBAL

TVS.EXPANDINDEXGLOBAL global_index num

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

TVS. IMPOINDEXGLOBAL

TVS. IMPOINDEXGLOBAL global_index sub_index

既存のデータインデックスをグローバルインデックスに関連付けます。 既存のデータインデックスのメタデータは、グローバルインデックスのメタデータと同じである必要があります。

TVS.LISTINDEXGLOBAL

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

グローバルインデックスに関する情報を照会します。

TVS.DELINDEXGLOBAL

TVS.DELINDEXGLOBAL global_index [sub_index] ...

グローバルインデックスと関連するデータインデックスの関連付けを解除します。 データインデックスが指定されていない場合、グローバルインデックスは削除され、関連するすべてのデータインデックスはグローバルインデックスとの関連付けが解除されます。

ベクトルデータ操作

TVS.HSETGLOBAL

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

グローバルインデックスにキーを挿入します。 キーが挿入された後、Tairは自動的にキーを適切なデータインデックスに書き込み、データがすべてのデータインデックスで均等に分散されるようにします。

TVS.HGETALLGLOBAL

TVS.HGETALLGLOBAL global_index key

グローバルインデックス内のkeyのすべてのデータレコードを照会します。

TVS.HMGETGLOBAL

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

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

TVS.DELGLOBAL

TVS.DELGLOBAL global_index key [key ...]

グローバルインデックスから特定のキーを削除します。

TVS.HDELGLOBAL

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

指定された属性キーとその値をグローバルインデックスの指定されたキーから削除します。

TVS.SCANGLOBAL

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

グローバルインデックスで特定の条件を満たすキーをスキャンします。

ベクトル最近傍クエリ

TVS.KNNSEARCHGLOBAL

TVS.KNNSEARCHGLOBAL global_index topNベクトル [filter_string] [param_key param_value]

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

TVS.KNNSEARCHFIELDGLOBAL

TVS.KNNSEARCHFIELDGLOBALglobal_indextopNベクトルfield_count field_name [field_name ...] [filter_string] [param_key param_value]

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

説明

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

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

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

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

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

  • ...: このシンボルの前にあるパラメーターを繰り返し指定できることを示します。

TVS.CREATEINDEXGLOBAL

項目

説明

構文

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

時間の複雑さ

O(1)

コマンド説明

グローバルインデックスを作成します。 このコマンドを使用すると、インデックスの作成とクエリの実行に使用する特定のアルゴリズムと距離関数を指定できます。

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

パラメーター

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

  • 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に設定すると、次のパラメーターを調整することで、BM25アルゴリズムの動作をさらにカスタマイズできます。

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

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

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

      • 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.CREATEINDEXGLOBAL 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.CREATEINDEXGLOBAL 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.CREATEINDEXGLOBAL 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.CREATEINDEXGLOBAL 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.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は各シャードにデータインデックスを作成して負荷分散を実装します。

パラメーター

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

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

Output

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

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

例:

サンプルコマンド:

TVS.EXPANDINDEXGLOBAL index_name0 3

サンプル出力:

OK

TVS. IMPOINDEXGLOBAL

項目

説明

構文

TVS. IMPOINDEXGLOBAL global_index sub_index

時間の複雑さ

O(1)

コマンド説明

既存のデータインデックスをグローバルインデックスに関連付けます。 既存のデータインデックスのメタデータは、グローバルインデックスのメタデータと同じである必要があります。

パラメーター

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

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

Output

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

  • データインデックスのメタデータがグローバルインデックスのメタデータと異なる場合、(エラー) ERR towインデックスは適切ではありませんエラーが返されます。

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

例:

サンプルコマンド:

TVS.IMPORTINDEXGLOBAL index_name0 testvector

サンプル出力:

OK

TVS.LISTINDEXGLOBAL

項目

説明

構文

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

時間の複雑さ

O(1)

コマンド説明

グローバルインデックスに関する情報を照会します。

パラメーター

  • num: クエリするグローバルインデックスの数。 このパラメーターを0に設定すると、すべてのグローバルインデックスに関する情報が返されます。

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

Output

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

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

例:

サンプルコマンド:

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)

コマンド説明

グローバルインデックスと関連するデータインデックスの関連付けを解除します。 データインデックスが指定されていない場合、グローバルインデックスは削除され、関連するすべてのデータインデックスはグローバルインデックスとの関連付けが解除されます。

説明

このコマンドでは、データインデックスは削除されません。 データインデックスを削除するには、TVS.DELINDEXコマンドを使用します。

パラメーター

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

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

Output

  • 操作が成功した場合、戻り値はグローバルインデックスが削除されているかどうかによって異なります。

    • グローバルインデックスを削除せずに、グローバルインデックスを関連付けられたデータインデックスから分離する場合、値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はベクトルインデックス内のキーの数を示す。

コマンド説明

グローバルインデックスにキーを挿入します。 キーが挿入された後、Tairは自動的にキーを適切なデータインデックスに書き込み、データがすべてのデータインデックスで均等に分散されるようにします。

キーがすでに存在する場合、その値は新しい値で更新されます。

パラメーター

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

  • key: ベクターの主キー識別子。TVS.DELGLOBALコマンドを使用して削除できます。

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

サンプル出力:

(integer) 3

TVS.HGETALLGLOBAL

項目

説明

構文

TVS.HGETALLGLOBAL global_index key

時間の複雑さ

ここで、Mはデータインデックスの数を示す。

コマンド説明

グローバルインデックス内のkeyのすべてのデータレコードを照会します。

パラメーター

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

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

Output

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

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

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

例:

サンプルコマンド:

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 ...]

時間の複雑さ

ここで、Mはデータインデックスの数を示す。

コマンド説明

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

パラメーター

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

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

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

Output

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

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

例:

サンプルコマンド:

TVS.HMGETGLOBAL index_name0 key0 create_time VECTOR

サンプル出力:

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

TVS.DELGLOBAL

項目

説明

構文

TVS.DELGLOBAL global_index key [key ...]

時間の複雑さ

O(1)

コマンド説明

グローバルインデックスから特定のキーを削除します。

パラメーター

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

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

Output

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

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

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

例:

サンプルコマンド:

TVS.DELGLOBAL my_index key0 key1

サンプル出力:

 (integer) 2

TVS.HDELGLOBAL

項目

説明

構文

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

時間の複雑さ

O(1)

コマンド説明

指定された属性キーとその値をグローバルインデックスの指定されたキーから削除します。

パラメーター

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

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

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

Output

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

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

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

例:

サンプルコマンド:

TVS.HDELGLOBAL index_name0 keyc VECTOR

サンプル出力:

 (integer) 1

TVS.SCANGLOBAL

項目

説明

構文

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

時間の複雑さ

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

コマンド説明

グローバルインデックスで特定の条件を満たすキーをスキャンします。

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

パラメーター

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

  • 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.SCANGLOBAL index_name0 0

サンプル出力:

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

TVS.KNNSEARCHGLOBAL

項目

説明

構文

TVS.KNNSEARCHGLOBAL global_index topNベクトル [filter_string] [param_key param_value]

時間の複雑さ

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

  • フラットアルゴリズム: O(N)* M

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

コマンド説明

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

たとえば、topN値をクエリする場合、Tairは各データインデックスから上位N個のベクトルを取得します。 この場合、ベクトルの最大数は、topN値 × データインデックスの数である。 上位N個のベクトルが各データインデックスから取得された後、Tairはこれらすべての結果を集計およびソートし、最終的なtopN値を返します。

パラメーター

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

  • 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アルゴリズムを使用する場合にのみ使用できます。

    • 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.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.KNNSEARCHFIELDGLOBALglobal_indextopNベクトルfield_count field_name [field_name ...] [filter_string] [param_key param_value]

時間の複雑さ

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

  • フラットアルゴリズム: O(N)* M

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

コマンド説明

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

パラメーター

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

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

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

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

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

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

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

Output

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

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

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

例:

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

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]"