smlar外掛程式可以用來計算兩個相同類型數組的相似性。
前提條件
執行個體大版本為PostgreSQL 10或以上。
說明暫不支援RDS PostgreSQL 17。
如執行個體大版本已滿足要求,但仍提示不支援,請升級核心小版本,具體操作,請參見升級核心小版本。
背景資訊
smlar外掛程式提供多種Function Compute兩個相同類型數組的相似性,同時提供參數來控制相似性計算方法,目前支援所有內建的資料類型。
基本函數介紹
float4 smlar(anyarray, anyarray)
計算兩個相同資料類型數組的相似性。
float4 smlar(anyarray, anyarray, bool useIntersect)
計算兩個自訂複合類型(元素,權重)數組的相似性,複合類型如下:
CREATE TYPE type_name AS (element_name anytype, weight_name FLOAT4);
useIntersect為true時,計算過程只包含重疊元素的部分;為false時計算過程包含所有元素。
float4 smlar( anyarray a, anyarray b, text formula )
計算兩個相同資料類型數組的相似性,數組通過formula指定。
formula的預定義變數說明如下:
N.i:兩個數組的共有元素的個數。
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。
text[] tsvector2textarray(tsvector)
轉化tsvector類型為text。
anyarray array_unique(anyarray)
對數組中的元素排序,排序結果不包含重複元素。
float4 inarray(anyarray, anyelement)
如果anyelement存在於anyarray中,返回1,否則返回0。
float4 inarray(anyarray, anyelement, float4, float4)
如果anyelement存在於anyarray中,返回第3個參數,否則返回第4個參數。
相關參數說明和支援的資料類型請參見smlar。
使用外掛程式
串連執行個體後建立smlar外掛程式,命令如下:
testdb=> create extension 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)
卸載外掛程式,命令如下:
testdb=> drop extension smlar;