您可以通过在数据库内使用smlar插件来高效计算数据相似度,smlar插件还提供了支持GiST和GIN索引的相似度运算符。
前提条件
支持的PolarDB PostgreSQL版的版本如下:- PostgreSQL 14(内核小版本14.5.1.0及以上)
- PostgreSQL 11(内核小版本1.1.28及以上)
说明 您可通过如下语句查看PolarDB PostgreSQL版的内核小版本的版本号:
- PostgreSQL 14
select version(); - PostgreSQL 11
show polar_version;
简介
smlar是PolarDB PostgreSQL版的一款开源第三方插件,提供了可以在数据库内高效计算数据相似度的函数,并提供了支持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插件更多详细信息,请参见:
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




