ベクトル関数と演算子

このドキュメントでは、ベクター データ型で使用できる関数と演算子の一覧を示します。

注記

TiDB Vector Search は、TiDB Self-Managed (TiDB >= v8.4) およびTiDB Cloudサーバーレスでのみ使用できます。 TiDB Cloud専用では使用できません。

ベクトル関数

以下の関数はベクトルデータ型専用に設計されています。

ベクトル距離関数:

関数名説明
VEC_L2_DISTANCE2つのベクトル間のL2距離(ユークリッド距離)を計算します
VEC_COSINE_DISTANCE2つのベクトル間のコサイン距離を計算します
VEC_NEGATIVE_INNER_PRODUCT2つのベクトルの内積の負数を計算します
VEC_L1_DISTANCE2つのベクトル間のL1距離(マンハッタン距離)を計算します

その他のベクトル関数:

関数名説明
VEC_DIMSベクトルの次元を返します
VEC_L2_NORMベクトルのL2ノルム(ユークリッドノルム)を計算します
VEC_FROM_TEXT文字列をベクトルに変換する
VEC_AS_TEXTベクトルを文字列に変換する

拡張された組み込み関数と演算子

次の組み込み関数と演算子は、 ベクトルデータ型の演算をサポートするために拡張されています。

算術演算子:

名前説明
+ベクトル要素ごとの加算演算子
-ベクトル要素ごとの減算演算子

ベクトル演算の仕組みの詳細については、 ベクトル データ型 | 算術参照してください。

集計(GROUP BY)関数:

名前説明
COUNT()返された行の数を返す
COUNT(DISTINCT)異なる値の数を返す
MAX()最大値を返す
MIN()最小値を返す

比較関数と演算子:

名前説明
BETWEEN ... AND ...値が範囲内にあるかどうかを確認する
COALESCE()最初のNULL以外の引数を返す
=等号演算子
<=>NULL セーフな等号演算子
>より大きい演算子
>=より大きいか等しい演算子
GREATEST()最大の引数を返す
IN()値が値セット内にあるかどうかを確認する
IS NULL値がNULLどうかをテストする
ISNULL()引数がNULLどうかをテストする
LEAST()最小の引数を返す
<より小さい演算子
<=以下演算子
NOT BETWEEN ... AND ...値が範囲内にないか確認する
!=<>等しくない演算子
NOT IN()値が値セット内にないかどうかを確認する

ベクトルの比較方法の詳細については、 ベクトル データ型 | 比較参照してください。

制御フロー関数:

名前説明
CASEケース演算子
IF()If/else構文
IFNULL()null if/else 構文
NULLIF()expr1 = expr2の場合はNULL返す

キャスト関数:

名前説明
CAST()値を文字列またはベクトルとしてキャストする
CONVERT()値を文字列としてキャストする

CAST()使用方法の詳細については、 ベクトル データ型 | キャスト参照してください。

完全な参考文献

VECL2距離

VEC_L2_DISTANCE(vector1, vector2)

次の式を使用して、2 つのベクトル間のL2距離 (ユークリッド距離) を計算します。

距離(p,q)=i=1n(piqi)2距離(p,q)=\sqrt {\sum \limits *{i=1}^{n}{(p* {i}-q_{i})^{2}}}

2 つのベクトルは同じ次元を持つ必要があります。そうでない場合はエラーが返されます。

例:

[tidb]> SELECT VEC_L2_DISTANCE('[0,3]', '[4,0]'); +-----------------------------------+ | VEC_L2_DISTANCE('[0,3]', '[4,0]') | +-----------------------------------+ | 5 | +-----------------------------------+

VEC_コサイン距離

VEC_COSINE_DISTANCE(vector1, vector2)

次の式を使用して 2 つのベクトル間のコサイン距離計算します。

距離(p,q)=1.0i=1npiqii=1npi2i=1nqi2距離(p,q)=1.0 - {\frac {\sum \limits *{i=1}^{n}{p* {i}q_{i}}}{{\sqrt {\sum \limits *{i=1}^{n}{p* {i}^{2}}}}\cdot {\sqrt {\sum \limits *{i=1}^{n}{q* {i}^{2}}}}}}

2 つのベクトルは同じ次元を持つ必要があります。そうでない場合はエラーが返されます。

例:

[tidb]> SELECT VEC_COSINE_DISTANCE('[1, 1]', '[-1, -1]'); +-------------------------------------------+ | VEC_COSINE_DISTANCE('[1, 1]', '[-1, -1]') | +-------------------------------------------+ | 2 | +-------------------------------------------+

VEC_負の内積

VEC_NEGATIVE_INNER_PRODUCT(vector1, vector2)

次の式を使用して、2 つのベクトル間の内積の負の値を使用して距離を計算します。

DISTANCE(p,q)=INNERPROD(p,q)=i=1npiqiDISTANCE(p,q)=- INNER_PROD(p,q)=-\sum \limits *{i=1}^{n}{p* {i}q_{i}}

2 つのベクトルは同じ次元を持つ必要があります。そうでない場合はエラーが返されます。

例:

[tidb]> SELECT VEC_NEGATIVE_INNER_PRODUCT('[1,2]', '[3,4]'); +----------------------------------------------+ | VEC_NEGATIVE_INNER_PRODUCT('[1,2]', '[3,4]') | +----------------------------------------------+ | -11 | +----------------------------------------------+

VECL1距離

VEC_L1_DISTANCE(vector1, vector2)

次の式を使用して、2 つのベクトル間のL1距離 (マンハッタン距離) を計算します。

距離(p,q)=i=1npiqi距離(p,q)=\sum \limits *{i=1}^{n}{|p* {i}-q_{i}|}

2 つのベクトルは同じ次元を持つ必要があります。そうでない場合はエラーが返されます。

例:

[tidb]> SELECT VEC_L1_DISTANCE('[0,0]', '[3,4]'); +-----------------------------------+ | VEC_L1_DISTANCE('[0,0]', '[3,4]') | +-----------------------------------+ | 7 | +-----------------------------------+

変数

VEC_DIMS(vector)

ベクトルの次元を返します。

例:

[tidb]> SELECT VEC_DIMS('[1,2,3]'); +---------------------+ | VEC_DIMS('[1,2,3]') | +---------------------+ | 3 | +---------------------+ [tidb]> SELECT VEC_DIMS('[]'); +----------------+ | VEC_DIMS('[]') | +----------------+ | 0 | +----------------+

VEC_L2_NORM

VEC_L2_NORM(vector)

次の式を使用してベクトルのL2 ノルム (ユークリッドノルム) を計算します。

NORM(p)=i=1npi2NORM(p)=\sqrt {\sum \limits *{i=1}^{n}{p* {i}^{2}}}

例:

[tidb]> SELECT VEC_L2_NORM('[3,4]'); +----------------------+ | VEC_L2_NORM('[3,4]') | +----------------------+ | 5 | +----------------------+

VEC_FROM_TEXT

VEC_FROM_TEXT(string)

文字列をベクトルに変換します。

例:

[tidb]> SELECT VEC_FROM_TEXT('[1,2]') + VEC_FROM_TEXT('[3,4]'); +-------------------------------------------------+ | VEC_FROM_TEXT('[1,2]') + VEC_FROM_TEXT('[3,4]') | +-------------------------------------------------+ | [4,6] | +-------------------------------------------------+

VEC_AS_TEXT

VEC_AS_TEXT(vector)

ベクトルを文字列に変換します。

例:

[tidb]> SELECT VEC_AS_TEXT('[1.000, 2.5]'); +-------------------------------+ | VEC_AS_TEXT('[1.000, 2.5]') | +-------------------------------+ | [1,2.5] | +-------------------------------+

MySQL 互換性

ベクトル関数と、ベクトル データ型に対する組み込み関数および演算子の拡張使用は TiDB 固有のものであり、MySQL ではサポートされていません。

参照

このページは役に立ちましたか?