E コマースや検索エンジンのシナリオでは、大規模データセットの類似度計算は重要な技術的課題です。単純な実装では類似度の計算が低速になり、多くのリソースを消費します。smlar は、PolarDB for PostgreSQL および 向けのオープンソースのサードパーティ拡張で、データベース内で類似度を効率的に計算するための関数と、GiST および GIN インデックスをサポートする類似度演算子を提供します。smlar 拡張は、PostgreSQL のすべての組み込みデータ型をサポートします。
前提条件
サポートされる PolarDB for PostgreSQL のバージョンは次のとおりです。
PostgreSQL 16 (マイナーエンジンバージョン 2.0.16.9.6.0 以降)
PostgreSQL 14 (マイナーエンジンバージョン 2.0.14.5.1.0 以降)
PostgreSQL 11 (マイナーエンジンバージョン 2.0.11.9.28.0 以降)
コンソールでマイナーエンジンバージョンを表示するか、SHOW polardb_version; 文を実行して確認できます。マイナーエンジンバージョンが要件を満たさない場合は、マイナーエンジンバージョンをアップグレードしてください。
使用方法
拡張をインストールします。
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)説明その他の関数については、「関数と演算子」をご参照ください。
拡張をアンインストールします。
DROP EXTENSION smlar;
関数と演算子
関数または演算子 | 説明 |
float4 smlar(anyarray, anyarray) | 同じデータ型の 2 つの配列間の類似度を計算します。配列は同じデータ型である必要があります。 |
float4 smlar(anyarray, anyarray, bool useIntersect) | カスタム複合型 (要素、重み) の 2 つの配列間の類似度を計算します。[useIntersect] パラメーターは、オーバーラップする要素のみを計算に含めるか、すべての要素を含めるかを指定します。 説明 複合型は次のように定義します。 |
float4 smlar(anyarray a, anyarray b, text formula) | カスタム数式を使用して、同じデータ型の 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 | 類似度の数式。有効な類似度のタイプ: cosine (デフォルト)、tfidf、オーバーラップ。 |
smlar.stattable STRING | コレクションレベルの統計を格納するテーブルの名前。テーブルは次のように定義します。 |
smlar.tf_method STRING | 単語頻度 (TF) を計算するためのメソッド。有効な値:
|
smlar.idf_plus_one BOOL | 逆文書頻度 (IDF) を計算するためのメソッド。有効な値:
|
関連ドキュメント
smlar 拡張の詳細は、以下を参照してください。