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