すべてのプロダクト
Search
ドキュメントセンター

PolarDB:smlar

最終更新日:Nov 11, 2024

大量のデータの類似性計算は、電子商取引や検索エンジンなどの分野で重要です。 類似度計算の単純な実装は、大量のリソースを消費し、低い性能を提供します。 smlarは、PolarDB for PostgreSQL (Oracle互換) のオープンソースのサードパーティ拡張機能です。 データベース内のデータ類似度を計算できる関数と、GiSTおよびGINインデックスをサポートする類似度演算子を提供します。 smlar拡張機能は、PostgreSQLのすべての組み込みデータ型をサポートします。

前提条件

この拡張機能は、次のエンジンを実行するPolarDB for PostgreSQL (Compatible with Oracle) クラスターでサポートされています。

  • PolarDB for PostgreSQL (Oracle互換) 2.0 (バージョン2.0.14.1.0以降)

説明

次のステートメントを実行して、PolarDB for PostgreSQL (Compatible with Oracle) クラスターのリビジョンバージョンを表示できます。

SHOW polar_version;

使用量

  1. smlarエクステンションを取り付けます。

    CREATE EXTENSION smlar;
    説明

    smlarの % 演算子は、ラム酒の演算子と競合します。 したがって、同じスキーマに2つの拡張機能を作成することはできません。

  2. 次のステートメントを実行して、配列の類似度を計算します。

    SELECT smlar('{3,2}'::int[], '{3,2,1}');
      smlar
    ----------
     0.816497
    (1 row)
    
    SELECT smlar('{1,4,6}'::int[], '{5,4,6}', 'N.i / (N.a + N.b)' );
      smlar
    ----------
     0.333333
    (1 row)
    説明

    その他の関数の詳細については、「関数と演算子」をご参照ください。

  3. smlarエクステンションを取り外します。

    DROP EXTENSION smlar;

関数と演算子

関数と演算子

説明

float4 smlar(anyarray, anyarray)

同じデータ型の2つの配列の類似度を計算します。 配列は同じデータ型を使用する必要があります。

float4 smlar(anyarray, anyarray, bool useIntersect)

カスタム複合タイプの2つの配列 (要素と重み) の類似度を計算します。 useIntersectパラメーターは、重複する要素のみまたはすべての要素が操作に関与するかどうかを指定します。

説明

次のステートメントを実行して複合型を定義します。

CREATE TYPE type_name AS (element_name anytype, weight_name FLOAT4);

float4 smlar(anyarray a, anyarray b, text formula)

同じデータ型の2つの配列間の類似度を計算します。 配列は、数式パラメータによって指定されます。 数式パラメータの定義済み変数:

  • N.i: 2つの配列 (交差) 内の同一要素の数。

  • N.a: 最初の配列の一意の要素の数。

  • N.b: 2番目の配列内の一意の要素の数。

anyarray % anyarray

2つの配列の類似度がしきい値を超えた場合、TRUEを返します。 それ以外の場合は、FALSEを返します。

text[] tsvector2textarray(tsvector)

tsvector型の配列を文字列に変換します。

anyarray array_unique(anyarray)

配列を並べ替え、重複排除します。

float4 inarray(anyarray, anyelement)

要素が配列に存在する場合、1.0を返します。 それ以外の場合、0を返します。

float4 inarray(anyarray, anyelement, float4, float4)

要素が配列に存在する場合、3番目のパラメーターを返します。 それ以外の場合は、4番目のパラメーターを返します。

パラメーター

パラメーター

説明

smlar.threshold FLOAT

類似度のしきい値。 パーセント記号 (%) 演算子と組み合わせた2つの配列が類似しているかどうかを判断するために使用されます。

smlar.persistent_cache BOOL

キャッシュされたグローバル統計をトランザクションに依存しないメモリに格納するかどうかを指定します。

smlar.type STRING

類似度の計算に使用される式。 consine (デフォルト)tfidfoverlapの類似性タイプを使用できます。

smlar.stattable STRING

収集範囲の統計を格納するテーブルの名前。 次のステートメントを実行して、テーブルを作成できます。

CREATE TABLE table_name (
  value   data_type UNIQUE,
  ndoc    int4 (or bigint)  NOT NULL CHECK (ndoc>0)
);

smlar.tf_method STRING

用語頻度 (TF) を計算するために使用される方法。 デフォルト値: n。 有効な値:

  • n: 簡単なカウント

  • log: 1 + log(n)

  • const: 1

smlar.idf_plus_one BOOL

逆ドキュメント頻度 (IDF) を計算するために使用される方法。 デフォルト値は FALSE です。 有効な値:

  • FALSE :log(d/df)

  • TRUE :log(1 + d/df) 。

関連ドキュメント

smlar拡張機能の詳細については、以下を参照してください。