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);
親トピック: ベクトル距離関数および演算子