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)でのように、expr1expr2で参照されている列が単一である場合は、vec1にベクトル索引が定義されていると、そのベクトル索引の定義時に使用されたメトリックが使用されます。

      vec1にベクトル索引が定義されていない場合は、COSINEメトリックが使用されます。

    • VECTOR_DISTANCE(vec1, vec2)またはVECTOR_DISTANCE(vec1+vec2, :bind)でのように、expr1expr2で参照されている列が複数ある場合は、すべての索引付き列について、索引の定義で使用されているメトリックが同じであると、そのメトリックが使用されます。

      一方、索引付きの列に共通のメトリックがない場合、または索引が定義されている列がない場合は、COSINEメトリックが使用されます。

  • 類似性検索問合せで、expr1またはexpr2で索引付き列が参照されており、ベクトル索引で指定されているメトリックと競合する距離メトリックを指定した場合は、そのベクトル索引は使用されず、指定したメトリックを使用して正確な検索が実行されます。

  • 近似(索引ベース)検索は、expr1またはexpr2のどちらかによって1つの列のみが参照されており、この列にベクトル索引が定義されており、vector_distanceで指定されているメトリックが、そのベクトル索引の定義で使用されているメトリックと一致する場合に実行できます。

パラメータ

  • expr1およびexpr2は、ベクトルに評価される必要があり、ディメンションの形式と数が同じである必要があります。

    JACCARD_DISTANCEまたはJACCARDメトリックを使用する場合は、expr1expr2BINARYベクトルに評価される必要があります。

  • このファンクションは、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 <=> expr2COSINE_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を返します。

INNER_PRODUCT

INNER_PRODUCTは、2つのベクトルの内積を計算します。2つのベクトルを入力として受け取り、内積をBINARY_DOUBLEとして返します。INNER_PRODUCT(<expr1>, <expr2>)は、-1 * VECTOR_DISTANCE(<expr1>, <expr2>, DOT)と同等です。

パラメータ

  • expr1およびexpr2は、ディメンションの形式と数が同じであるベクトルに評価される必要があります。

  • INNER_PRODUCTは、expr1またはexpr2のどちらかがNULLの場合は、NULLを返します。