VECTOR_DISTANCE
VECTOR_DISTANCE
は、2つのベクトル間の距離を計算するために使用できるメインのファンクションです。
目的
VECTOR_DISTANCE
は、パラメータとして2つのベクトルを取ります。オプションで、距離を計算するための距離メトリックを指定できます。距離メトリックを指定しない場合の、デフォルトの距離メトリックはコサインです。入力ベクトルがBINARY
ベクトルである場合、デフォルトのメトリックはハミングです。
オプションで、次の短縮ベクトル距離ファンクションを使用できます。
-
L1_DISTANCE
-
L2_DISTANCE
-
COSINE_DISTANCE
-
INNER_PRODUCT
-
HAMMING_DISTANCE
-
JACCARD_DISTANCE
すべてのベクトル距離ファンクションは、入力として2つのベクトルを取り、それらの間の距離をBINARY_DOUBLE
として返します。
-
メトリックを3番目の引数として指定すると、そのメトリックが使用されます。
-
メトリックを指定しない場合は、次のルールが適用されます:
-
VECTOR_DISTANCE(vec1, :bind)
でのように、expr1
とexpr2
で参照されている列が単一である場合は、vec1
にベクトル索引が定義されていると、そのベクトル索引の定義時に使用されたメトリックが使用されます。vec1
にベクトル索引が定義されていない場合は、COSINE
メトリックが使用されます。 -
VECTOR_DISTANCE(vec1, vec2)
またはVECTOR_DISTANCE(vec1+vec2, :bind)
でのように、expr1
とexpr2
で参照されている列が複数ある場合は、すべての索引付き列について、索引の定義で使用されているメトリックが同じであると、そのメトリックが使用されます。一方、索引付きの列に共通のメトリックがない場合、または索引が定義されている列がない場合は、
COSINE
メトリックが使用されます。
-
-
類似性検索問合せで、
expr1
またはexpr2
で索引付き列が参照されており、ベクトル索引で指定されているメトリックと競合する距離メトリックを指定した場合は、そのベクトル索引は使用されず、指定したメトリックを使用して正確な検索が実行されます。 -
近似(索引ベース)検索は、
expr1
またはexpr2
のどちらかによって1つの列のみが参照されており、この列にベクトル索引が定義されており、vector_distanceで指定されているメトリックが、そのベクトル索引の定義で使用されているメトリックと一致する場合に実行できます。
パラメータ
-
expr1
およびexpr2
は、ベクトルに評価される必要があり、ディメンションの形式と数が同じである必要があります。JACCARD_DISTANCE
またはJACCARD
メトリックを使用する場合は、expr1
とexpr2
がBINARY
ベクトルに評価される必要があります。 -
このファンクションは、
expr1
またはexpr2
のどちらかがNULLの場合は、NULLを返します。 -
metric
は、次のいずれかのトークンである必要があります。-
COSINE
メトリックはデフォルトのメトリックです。2つのベクトル間のコサイン距離を計算します。 -
DOT
メトリックは、2つのベクトルの否定ドット積を計算します。INNER_PRODUCT
ファンクションは、このメトリックの否定と同様に、ドット積を計算します。 -
EUCLIDEAN
メトリックは、L2距離とも呼ばれ、2つのベクトルの間のユークリッド距離を計算します。 -
EUCLIDEAN_SQUARED
メトリック(L2_SQUARED
,とも呼ばれる)は、平方根を取らないユークリッド距離です。 -
HAMMING
メトリックは、2つのベクトルの間で異なっている数値ディメンションをカウントすることで、2つのベクトルの間のハミング距離を計算します。 -
MANHATTAN
メトリックは、L1距離またはタクシー距離とも呼ばれ、2つのベクトル間のマンハッタン距離を計算します。 -
JACCARD
メトリックは、ジャッカード距離を計算します。問合せで使用される2つのベクトルは、BINARY
ベクトルである必要があります。
-
距離の短縮演算子
構文
-
expr1 <-> expr2
<->
はユークリッド距離演算子です。expr1 <-> expr2
は、L2_DISTANCE(expr1, expr2)
またはVECTOR_DISTANCE(expr1, expr2, EUCLIDEAN)
と同等です -
expr1 <=> expr2
<=>
はコサイン距離演算子です。expr1 <=> expr2
はCOSINE_DISTANCE(expr1, expr2)
またはVECTOR_DISTANCE(expr1, expr2, COSINE)
と同等です -
expr1 <#> expr2
<#>
は、否定ドット積演算子です。expr1 <#> expr2
は、-1*INNER_PRODUCT(expr1, expr2)
またはVECTOR_DISTANCE(expr1, expr2, DOT)
と同等です
距離の短縮演算子の使用例
'[1, 2]' <-> '[0,1]'
v1 <-> '[' || '1,2,3' || ']' is equivalent to v1 <-> '[1, 2, 3]'
v1 <-> '[1,2]' is equivalent to L2_DISTANCE(v1, '[1,2]')
v1 <=> v2 is equivalent to COSINE_DISTANCE(v1, v2)
v1 <#> v2 is equivalent to -1*INNER_PRODUCT(v1, v2)
例
メトリックEUCLIDEAN
を持つVECTOR_DISTANCE
は、L2_DISTANCE
と同等です。
VECTOR_DISTANCE(expr1, expr2, EUCLIDEAN);
L2_DISTANCE(expr1, expr2);
メトリックCOSINE
を持つVECTOR_DISTANCE
は、COSINE_DISTANCE
と同等です。
VECTOR_DISTANCE(expr1, expr2, COSINE);
COSINE_DISTANCE(expr1, expr2);
メトリックDOT
を持つVECTOR_DISTANCE
は、-1 * INNER_PRODUCT
と同等です。
VECTOR_DISTANCE(expr1, expr2, DOT);
-1*INNER_PRODUCT(expr1, expr2);
メトリックMANHATTAN
を持つVECTOR_DISTANCE
は、L1_DISTANCE
と同等です。
VECTOR_DISTANCE(expr1, expr2, MANHATTAN);
L1_DISTANCE(expr1, expr2);
メトリックHAMMING
があるVECTOR_DISTANCE
は、HAMMING_DISTANCE
と同等です:
VECTOR_DISTANCE(expr1, expr2, HAMMING);
HAMMING_DISTANCE(expr1, expr2);
メトリックJACCARD
があるVECTOR_DISTANCE
は、JACCARD_DISTANCE
と同等です:
VECTOR_DISTANCE(expr1, expr2, JACCARD);
JACCARD_DISTANCE(expr1, expr2);
L1_DISTANCE
L1_DISTANCE
は、2つのベクトル間の距離を計算するVECTOR_DISTANCE
ファンクションの短縮バージョンです。入力として2つのベクトルを取り、それらの間の距離をBINARY_DOUBLE
として返します。
パラメータ
-
expr1
およびexpr2
は、ベクトルに評価される必要があり、ディメンションの形式と数が同じである必要があります。 -
L1_DISTANCE
は、expr1
またはexpr2
のどちらかがNULLの場合は、NULLを返します。
L2_DISTANCE
L2_DISTANCE
は、2つのベクトル間の距離を計算するVECTOR_DISTANCE
ファンクションの短縮バージョンです。入力として2つのベクトルを取り、それらの間の距離をBINARY_DOUBLE
として返します。
パラメータ
-
expr1
およびexpr2
は、ディメンションの形式と数が同じであるベクトルに評価される必要があります。 -
L2_DISTANCE
は、expr1
またはexpr2
のどちらかがNULLの場合は、NULLを返します。
COSINE_DISTANCE
COSINE_DISTANCE
は、2つのベクトル間の距離を計算するVECTOR_DISTANCE
ファンクションの短縮バージョンです。入力として2つのベクトルを取り、それらの間の距離をBINARY_DOUBLE
として返します。
パラメータ
-
expr1
およびexpr2
は、ディメンションの形式と数が同じであるベクトルに評価される必要があります。 -
COSINE_DISTANCE
は、expr1
またはexpr2
のどちらかがNULLの場合は、NULLを返します。