数据库
首页 > 数据库> > PostgreSQL通过pg_trgm扩展的三元索引实现全文检索

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

作者:互联网

本文介绍利用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