您可以通过在数据库内使用smlar插件来高效计算数据相似度,smlar插件还提供了支持GiST和GIN索引的相似度运算符。
注意事项
由于smlar插件的%
操作符与RUM插件的%
操作符冲突,因此smlar与RUM两个插件无法同时创建在同一个schema中。
简介
smlar是PolarDB PostgreSQL版(兼容Oracle)的一款开源第三方插件,提供了可以在数据库内高效计算数据相似度的函数,并提供了支持GiST和GIN索引的相似度运算符。目前smlar插件已经支持PostgreSQL所有的内置数据类型。
使用指南
安装插件。
CREATE EXTENSION smlar;
执行以下命令计算两个数组的相似度。
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) | 计算两个相同数据类型数组的相似度,数组的数据类型需要一致。 |
float4 smlar(anyarray, anyarray, bool useIntersect) | 计算两个自定义复合类型(元素、权重)数组的相似度,useIntersect参数表示让仅重叠元素参与运算还是全部元素参与运算。 说明 复合类型定义方式如下:
|
float4 smlar(anyarray a, anyarray b, text formula) | 计算两个相同数据类型数组的相似度,数组通过formula指定,数组的数据类型需要一致。formula的预定义变量说明如下:
|
anyarray % anyarray | 当两个数组的相似度超过阈值时返回TRUE;否则返回FALSE。 |
text[] tsvector2textarray(tsvector) | 将tsvector类型转换为字符串数组。 |
anyarray array_unique(anyarray) | 对数组进行排序、去重。 |
float4 inarray(anyarray, anyelement) | 如果元素出现在数组中,则返回1.0;否则返回0。 |
float4 inarray(anyarray, anyelement, float4, float4) | 如果元素出现在数组中,则返回第三个参数;否则返回第四个参数。 |
可配置参数说明
参数 | 说明 |
smlar.threshold FLOAT | 相似度阈值,用于给百分号(%)运算符判断两个数组是否相似。 |
smlar.persistent_cache BOOL | 全局统计信息的缓存是否存放在与事务无关的内存中。 |
smlar.type STRING | 相似度计算公式,可选的相似度类型包含:consine(默认)、tfidf、overlap。 |
smlar.stattable STRING | 存储集合范围统计信息的表名,表定义方式如下:
|
smlar.tf_method STRING | 计算词频TF(Term Frequency)的方法,取值如下:
|
smlar.idf_plus_one BOOL | 计算逆文本频率指数IDF(Inverse Document Frequency)的方法,取值如下:
|
相关参考
smlar插件更多详细信息,请参见: