ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

PostgreSQL通过pg_trgm扩展的三元索引实现全文检索

2021-03-05 22:32:54  阅读:332  来源: 互联网

标签:PostgreSQL TextData trgm 全文检索 tbl 三元 TestData pg


本文介绍利用pg_trgm扩展实现全文检索。

1. 概述

PostgreSQL可以使用三元索引增强全文检索。三元算法对字符串进行分词,如“dog” 被分为 “d”,”do”,”dog”,”og”多个词。

pg_trgm扩展支持三元匹配。也在Gist和Gin索引上使用三元匹配操作提升检索速度或性能。

对于全文搜索提供了不同的同义词,同时也可以使用Trigram来实现打字更正和建议。下面通过示例说明。

2. 模糊匹配

这里先介绍postgresql几种模糊操作符:

like都比较熟悉的大小写敏感匹配,ilike操作是大小写不敏感模糊匹配。

Postgresql同时还相应的符号表示:

符号关键字
~LIKE
~*ILIKE
!~NOT LIKE
!~*NOT ILIKE

3. 示例

创建示例表:

CREATE TABLE tbl_TestData
(
	ID INT
	,TextData TEXT
);

对text类型字段创建三元模式索引:

CREATE INDEX trgm_idx_tbl_TestData_TextData ON tbl_TestData USING GIST (TextData gist_trgm_ops);

执行上面语句,如果提示下面错误:
ERROR: operator class "gist_trgm_ops" does not exist for access method "gist" .

则需要安装pg_trgm扩展:

CREATE EXTENSION pg_trgm;

插入示例数据:

INSERT INTO tbl_TestData
VALUES 
(1,'Anvesh Patel')
,(2,'Database Research & Development')
,(3,'PostgreSQL is better than SQL Server')
,(4,'PostgreSQL is supported powerful BRIN Indexes');

执行select查询进行文本比较:

SELECT * 
FROM tbl_TestData
WHERE TextData ~ 'PostgreSQL is';
 
SELECT * 
FROM tbl_TestData
WHERE TextData LIKE '%SQL%';
 
SELECT * 
FROM tbl_TestData
WHERE TextData ~* 'ql';

执行下面语句可以查看三元索引生成结果:

select show_trgm('study postgresql and greenplum') as notes;

返回结果:

{  a,  g,  p,  s, an, gr, po, st,and,dy ,een,enp,esq,gre,lum,nd ,npl,ost,plu,pos,ql ,ree,res,sql,stg,stu,tgr,tud,udy,um }

执行下面语句检查相似性:

SELECT SIMILARITY('Anvesh','anv') AS SimilarPercentage;
SELECT SIMILARITY('Anvesh','anve') AS SimilarPercentage;

4. 总结

本文介绍pg_trgm扩展实现模糊检索。我们看到示例都是英文,如果是中文需要先转为bytea类型。

标签:PostgreSQL,TextData,trgm,全文检索,tbl,三元,TestData,pg
来源: https://blog.csdn.net/neweastsun/article/details/114417319

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有