pg_similarity
提供17种距离度量函数
仓库
eulerto/pg_similarity
https://github.com/eulerto/pg_similarity
源码
pg_similarity-1.0.tar.gz
pg_similarity-1.0.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_similarity | 1.0 | RAG | BSD-3-Clause | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 1840 | pg_similarity | 否 | 是 | 否 | 是 | 否 | 是 | - |
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | MIXED | 1.0 | 1817161514 | pg_similarity | - |
| RPM | PIGSTY | 1.0 | 1817161514 | pg_similarity_$v | - |
| DEB | PGDG | 1.0 | 1817161514 | postgresql-$v-similarity | - |
构建
您可以使用 pig build 命令构建 pg_similarity 扩展的 RPM 包:
BASH
安装
您可以直接安装 pg_similarity 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
BASH
使用 pig 或者是 apt/yum/dnf 安装扩展:
安装
BASH
pig
BASH
dnf
BASH
apt
BASH
创建扩展:
SQL
用法
pg_similarity:PostgreSQL 相似度查询支持。 来源:README.md
pg_similarity 是支持 PostgreSQL 相似度查询的扩展。实现与 RDBMS 紧密集成,定义了运算符,你可以使用 ~~~ 和 ~!~ 等代替传统运算符(= 和 <>)。
pg_similarity 有三个主要组件:
- 函数:实现文献中可用的相似度算法的函数集合。这些函数可作为 UDF 使用,并作为实现相似度运算符的基础;
- 运算符:基于相似度函数定义的运算符集合。它们使用相似度函数获取相似度阈值,并与用户定义的阈值比较以决定是否匹配;
- 会话变量:存储相似度函数参数的变量集合。这些变量可在运行时定义。
函数与运算符
该扩展支持一系列相似度算法。最知名的算法均已覆盖。请注意每种算法适用于特定领域。提供以下算法:
- L1 距离(又称城市街区距离或曼哈顿距离)
- 余弦距离
- Dice 系数
- 欧几里得距离
- 汉明距离
- Jaccard 系数
- Jaro 距离
- Jaro-Winkler 距离
- Levenshtein 距离
- 匹配系数
- Monge-Elkan 系数
- Needleman-Wunsch 系数
- 重叠系数
- Q-Gram 距离
- Smith-Waterman 系数
- Smith-Waterman-Gotoh 系数
- Soundex 距离
| 算法 | 函数 | 运算符 | 支持索引 | 参数 |
|---|---|---|---|---|
| L1 距离 | block(text, text) returns float8 | ~++ | 是 | pg_similarity.block_tokenizer, pg_similarity.block_threshold, pg_similarity.block_is_normalized |
| 余弦距离 | cosine(text, text) returns float8 | ~## | 是 | pg_similarity.cosine_tokenizer, pg_similarity.cosine_threshold, pg_similarity.cosine_is_normalized |
| Dice 系数 | dice(text, text) returns float8 | ~-~ | 是 | pg_similarity.dice_tokenizer, pg_similarity.dice_threshold, pg_similarity.dice_is_normalized |
| 欧几里得距离 | euclidean(text, text) returns float8 | ~!! | 是 | pg_similarity.euclidean_tokenizer, pg_similarity.euclidean_threshold, pg_similarity.euclidean_is_normalized |
| 汉明距离 | hamming(bit varying, bit varying) returns float8 / hamming_text(text, text) returns float8 | ~@~ | 否 | pg_similarity.hamming_threshold, pg_similarity.hamming_is_normalized |
| Jaccard 系数 | jaccard(text, text) returns float8 | ~?? | 是 | pg_similarity.jaccard_tokenizer, pg_similarity.jaccard_threshold, pg_similarity.jaccard_is_normalized |
| Jaro 距离 | jaro(text, text) returns float8 | ~%% | 否 | pg_similarity.jaro_threshold, pg_similarity.jaro_is_normalized |
| Jaro-Winkler 距离 | jarowinkler(text, text) returns float8 | ~@@ | 否 | pg_similarity.jarowinkler_threshold, pg_similarity.jarowinkler_is_normalized |
| Levenshtein 距离 | lev(text, text) returns float8 | ~== | 否 | pg_similarity.levenshtein_threshold, pg_similarity.levenshtein_is_normalized |
| 匹配系数 | matchingcoefficient(text, text) returns float8 | ~^^ | 是 | pg_similarity.matching_tokenizer, pg_similarity.matching_threshold, pg_similarity.matching_is_normalized |
| Monge-Elkan 系数 | mongeelkan(text, text) returns float8 | ~|| | 否 | pg_similarity.mongeelkan_tokenizer, pg_similarity.mongeelkan_threshold, pg_similarity.mongeelkan_is_normalized |
| Needleman-Wunsch 系数 | needlemanwunsch(text, text) returns float8 | ~#~ | 否 | pg_similarity.nw_threshold, pg_similarity.nw_is_normalized |
| 重叠系数 | overlapcoefficient(text, text) returns float8 | ~** | 是 | pg_similarity.overlap_tokenizer, pg_similarity.overlap_threshold, pg_similarity.overlap_is_normalized |
| Q-Gram 距离 | qgram(text, text) returns float8 | ~~~ | 是 | pg_similarity.qgram_threshold, pg_similarity.qgram_is_normalized |
| Smith-Waterman 系数 | smithwaterman(text, text) returns float8 | ~=~ | 否 | pg_similarity.sw_threshold, pg_similarity.sw_is_normalized |
| Smith-Waterman-Gotoh 系数 | smithwatermangotoh(text, text) returns float8 | ~!~ | 否 | pg_similarity.swg_threshold, pg_similarity.swg_is_normalized |
| Soundex 距离 | soundex(text, text) returns float8 | ~*~ | 否 |
参数
多个参数控制 pg_similarity 函数和运算符的行为。可分为三类:
- tokenizer:控制字符串的分词方式。有效值为 alnum、gram、word 和 camelcase。所有 token 均为小写。默认为 alnum。
- alnum:分隔符为任何非字母数字字符。
- gram:n-gram 是使用逐一滑动技术提取的长度为 n 的子序列。
- word:分隔符为空白字符。
- camelcase:分隔符为大写字母,但大写字母也作为 token 的首字符。
- threshold:控制结果集的灵活程度。取值范围 0.0 到 1.0。默认为 0.7。
- normalized:控制相似度系数/距离是否归一化(在 0.0 和 1.0 之间)。默认为 true。
示例
运行时设置参数:
SQL
示例用表:
SQL
使用相似度函数
SQL
使用 levenshtein 运算符 (~==)
SQL
使用 qgram 运算符 (~~~)
SQL
比较不同运算符
SQL