文档章节

postgresql pg_trgm basic

扫把就是扫把
 扫把就是扫把
发布于 2016/04/24 16:31
字数 619
阅读 113
收藏 0


PostgreSQL pg_trgm usage,字符串拆分,相似匹配,模糊查询

pg_trgm是一个比较有意思的模块, 主要功能是比较两个字符串的相似度, 可以使用GIN或者GIST索引。


原理解析:

要比较字符串的相似度,首先要对原来的字符串进行拆分 :

下面是trigram or trigraph 拆分规则(不区分大小写) :

字符串被前置两个空格,后置一个空格,然后按3个连续的字符为分组进行拆分。

例如 :

mysite=> select show_trgm('bwhite');
              show_trgm              
-------------------------------------
 {"  b"," bw",bwh,hit,ite,"te ",whi}
(1 row)


拆分完后, 比较两个字符的相似度,算法是(两个字符串相同trigram的个数)除以(总共被拆成多少个trigram),

pg_trgm这个extension新增的几个常用的函数和操作符 : 

similarity(text, text)

计算两个字符串的相似度。

show_trgm(text)

返回字符串拆分后的trigram。

show_limit()

返回目前系统中设置的相似度阈值,大于或者等于这个阈值的两个字符串,similarity_op(text, text)或 字符串1 % 字符串2 返回true.

set_limit(real)

这个函数用来设置相似度阈值。

例如:

mysite=> select similarity('bwtigerte','bwhite');
 similarity 
------------
   0.214286
(1 row)
mysite=> select set_limit(0.4);
 set_limit 
-----------
       0.4
(1 row)


测试环境:

    os: ubuntu 14.04

    postgresql: 9.4


1. 建库, 建表

shell>>>: sudo adduser mysite
sudo su - postgres
psql
CREATE USER mysite WITH PASSWORD 'tiger';
CREATE DATABASE mysite OWNER mysite;
GRANT ALL PRIVILEGES ON DATABASE mysite to mysite;


超级用户连接 mysite 数据库并安装 pg_trgm 扩展:

\c mysite
CREATE EXTENSION pg_trgm;

测试扩展模块是否安装成功:

mysite=> select show_trgm('bwhite');
              show_trgm              
-------------------------------------
 {"  b"," bw",bwh,hit,ite,"te ",whi}
(1 row)

2. 创建表添加记录:

mysite=> select * from polls_textlike;
 id | title  |                 content                  |           pub_date            
----+--------+------------------------------------------+-------------------------------
  1 | tiger  | tiger are cute                           | 2015-10-16 20:58:13.247366+08
  2 | bwhite | when tiger gets angry, you just run away | 2015-10-17 13:55:46.163738+08
(2 rows)


为需要相似匹配的字段创建索引:

CREATE INDEX trgm_idx ON mysite USING gist (content gist_trgm_ops);

重点来了,计算 content 字段的相似度:

mysite=> SELECT content, similarity(content, 'tiger'), id FROM polls_textlike;
                 content                  | similarity | id 
------------------------------------------+------------+----
 tiger are cute                           |        0.4 |  1
 when tiger gets angry, you just run away |   0.153846 |  2
(2 rows)


更多:

别人的测试:

In the following example we’ll see the use of each one. Operator % will return true if the similarity of the strings is greater than similarity threshold returned by show_limit function. In this example, both string are equal, in consequence, the operation will return true:

palominodb=# select similarity(‘Palomino’,’Palomino’)  AS Similarity,
‘Palomino'<->’Palomino’              AS distance,
‘Palomino’ % ‘Palomino’              AS SimilarOrNot;
-[ RECORD 1 ]+–
similarity          | 1
distance     | 0
similarornot     | t


参考链接:

http://www.postgresql.org/docs/9.4/static/pgtrgm.html

http://www.pythian.com/blog/indexing-text-columns-with-gist-or-gin-to-optimize-like-ilike-using-pg_trgm-in-postgres-9-1-part-1-2/

http://blog.163.com/digoal@126/blog/static/163877040201191882553803/



© 著作权归作者所有

扫把就是扫把
粉丝 2
博文 37
码字总数 23616
作品 0
成都
程序员
私信 提问
PostgreSQL 相似人群圈选,人群扩选,向量相似 使用实践 - cube

背景 PostgreSQL 相似插件非常多,插件的功能以及用法如下: 《PostgreSQL 相似搜索插件介绍大汇总 (cube,rum,pgtrgm,smlar,imgsmlr,pgsimilarity) (rum,gin,gist)》 相似人群分析在精准营销...

pg小助手
2018/10/23
0
0
PostgreSQL 相似文本检索与去重 - (银屑病怎么治?银屑病怎么治疗?银屑病怎么治疗好?银屑病怎么能治疗好?)

标签 PostgreSQL , 相似字符串 , 全文检索 , 去重 , 相似问题 , 医疗 , plr , plpython , madlib , 文本处理 背景 在云栖社区的问答区,有一位网友提到有一个问题: 解这个问题的思路 1. 首先...

德哥
2018/04/18
0
0
PostgreSQL 9.2 RC1 发布

PostgreSQL 全球开发组宣布首个 PostgreSQL 9.2 的 RC 版本发布,该版本在性能、水平和垂直伸缩性上的改进,修复了发现的问题,用户应该尽快下载并测试 PostgreSQL 9.2 RC1 以确保最终正式版...

oschina
2012/08/28
1K
6
【独家直播】 德哥PG系列课程—PostgreSQL 多场景 沙箱实验

标签 PostgreSQL , 沙箱 , 实验 背景 为了能够让用户可以更快的上手PostgreSQL,德哥与云栖团队的小伙伴制作了一系列阿里云RDS PostgreSQL沙箱实验。 所有实验内容都结合了应用场景,非常具有...

小白dora
01/10
0
0
PostgreSQL 相似搜索插件介绍大汇总 (cube,rum,pg_trgm,smlar,imgsmlr,pg_similarity) (rum,gin,gist)

标签 PostgreSQL , cube , rum , pgtrgm , smlar , imgsmlr , pgsimilarity , gin , gist , 倒排 , 相似 , 向量 , 特征 , 图像 , 文本 , 字符串 , 全文检索 背景 在搜索业务场景中,相似搜索...

德哥
04/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

vue预渲染

prerender-spa-plugin 安装prerender-spa-plugin (插件使用见npm官网)[https://www.npmjs.com/package/prerender-spa-plugin] npm install prerender-spa-plugin --save-dev 配置prerender-s......

莫西摩西
24分钟前
0
0
Command模式

https://www.cnblogs.com/devinzhang/archive/2012/01/06/2315235.html

南桥北木
59分钟前
1
0
由于PostgreSQL9.x二进制输出格式默认值改变导致的读取图片错误

今天从社区邮件看到一个这样的问题,感觉很有意思,在这分享给大家~具体如下: 问题现象: 作者有一个很老的Java应用,当时后端采用的PostgreSQL数据库版本为8.x,该系统除了正常的数据增删...

闻术苑
今天
2
0
导入sql时出现Invalid default value for 'create_time'报错处理方法

当运行SQL会出现:[Err] 1067 - Invalid default value for 'create_time',是因为Mysql版本不同,如果版本不 < 5.6请去的话报错的处理方法如下: 方法 :alter table table_name modify cre......

writeademo
今天
1
0
对ssm(spring,springmvc,mybatis)的了解总结

ssm框架现在是java web开发的三个主流框架 ,其实严格来算只算是两个框架,因为springmvc属于spring框架 ,是spring的一个mvc子框架 那么我们下面就来了解一下三大框架把 一 .Spring spring...

咸鱼-李y
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部