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

PolarDB:smlar

最終更新日:Jul 04, 2025

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

サポートされているバージョン

smlar 拡張機能は、PolarDB for PostgreSQL クラスタが次のデータベースエンジンバージョンのいずれかを実行している場合にのみサポートされます。

  • PolarDB for PostgreSQL 16 (リビジョンバージョン 2.0.16.9.6.0 以降)

  • PolarDB for PostgreSQL 14 (リビジョンバージョン 2.0.14.5.1.0 以降)

  • PolarDB for PostgreSQL 11 (リビジョンバージョン 2.0.11.9.28.0 以降)

説明

クラスタのバージョン情報を表示するには、PolarDB コンソールに移動するか、SHOW polardb_version; 文を実行します。リビジョンバージョンが要件を満たしていない場合は、更新してください。

使用方法

  1. smlar 拡張機能をインストールします。

    CREATE EXTENSION smlar;
    説明

    smlar の % オペレーターは rum のオペレーターと競合するため、これら 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 つの配列間の類似度を計算します。配列は formula パラメータで指定されます。 formula パラメータの定義済み変数:

  • [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](デフォルト)、[tfidf][overlap]

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 拡張機能の詳細については、以下を参照してください。