このトピックでは、smlar拡張を使用して、同じデータ型の2つの配列間の類似度を計算する方法について説明します。
前提条件
RDSインスタンスはPostgreSQL 10以降のバージョンを実行します。
説明この拡張機能は、PostgreSQL 17を実行するApsaraDB RDS for PostgreSQLインスタンスではサポートされていません。
RDSインスタンスのメジャーエンジンバージョンが要件を満たしているが、拡張機能がまだサポートされていない場合、RDSインスタンスのマイナーエンジンバージョンが更新されます。 詳細については、「マイナーエンジンバージョンの更新」をご参照ください。
背景情報
smlar拡張は、同じデータ型の2つの配列間の類似性を計算するための複数の関数を提供します。 また、類似度計算方法を制御するパラメータも提供する。 すべての組み込みデータ型がサポートされています。
機能説明
float4 smlar(anyarray、anyarray)
同じデータ型の2つの配列間の類似度を計算します。
float4 smlar(anyarray, anyarray, bool useIntersect)
複合データ型の2つの配列間の類似度を計算します。 複合データ型は次のように定義されます。
CREATE TYPE type_name AS (element_name anytype, weight_name FLOAT4);
useIntersectパラメーターがtrueに設定されている場合、重複する要素を含む部分のみが計算されます。 useIntersectパラメーターがfalseに設定されている場合、すべての要素が計算に使用されます。
float4 smlar( anyarray a, anyarray b, テキスト式)
同じデータ型の2つの配列間の類似度を計算します。 配列は、数式パラメータによって指定されます。
数式の定義済み変数は次のとおりです。
N.i: 2つの配列の共通要素の数。
N.a: 配列a内の別個の要素の数。
N.b: 配列b内の個別要素の数。
float4 set_smlar_limit(float4)
smlar.thresholdパラメーターを設定します。
float4 show_smlar_limit()
smlar.thresholdパラメーター値を表示します。
anyarray % anyarray
配列間の類似度がsmlar.thresholdパラメーター値より大きい場合はtrueを返します。 それ以外の場合、関数はfalseを返します。
tsvector2textarray(tsvector) text[]
tsvector型をtext型に変換します。
anyarray array_unique(anyarray)
配列内の要素 (重複要素を除く) を並べ替えます。
float4 inarray(anyarray, anyelement)
anyelementパラメーター値がanyarrayパラメーター値に存在する場合は1を返します。 それ以外の場合、関数はfalseを返します。 0 です。
float4 inarray(anyarray, anyelement, float4, float4)
anyelementがanyarrayに存在する場合、3番目のパラメーター値を返します。 それ以外の場合、関数は4番目のパラメーター値を返します。
パラメーターの説明とサポートされるデータ型の詳細については、「smlar」をご参照ください。
拡張機能を使用するUse the extension
インスタンスに接続したら、次のステートメントを実行してsmlar拡張機能を作成します。
testdb=> create extension smlar;
次のステートメントを実行して、smlarの基本機能を使用します。
testdb=> SELECT smlar('{1,4,6}'::int[], '{5,4,6}' ); smlar ---------- 0.666667 (1 row) testdb=> SELECT smlar('{1,4,6}'::int[], '{5,4,6}', 'N.i / sqrt(N.a * N.b)' ); smlar ---------- 0.666667 (1 row)
次のステートメントを実行してsmlarを削除します。
testdb=> drop extension smlar;