PostgreSQL之zhparser全文索引

2016/11/03 PostgreSQL 共 1090 字,约 4 分钟

参考

PostgreSQL10实时全文检索和分词,相似搜索,模糊匹配实现类似Google搜索自动提示
这个帖子的方法比较不错,值得试试,被吸引的点如下:

CREATE INDEX name_idx ON goods USING GIN(to_tsvector('English',name));

实例(已过时)

加载全文索引插件zhparser (需要具有superuser权限加载)

drop extension if exists zhparser cascade; 
create extension zhparser; 
create text search configuration chinesecfg (parser = zhparser); 
alter text search configuration chinesecfg add mapping for n,v,a,i,e,l with simple;

 

建表

CREATE TABLE tb_staticsite (
	siteid varchar(64),
	sitedesc varchar(4000),
	sitetype bigint,
	longitude varchar(64),
	latitude varchar(64),
	siteaddress varchar(500)
);

加全文索引字段

ALTER TABLE tb_staticsite add column sitedesc_ts tsvector;
ALTER TABLE tb_staticsite add column siteaddress_ts tsvector;

建全文索引

CREATE INDEX idx_staticsite_sitedesc ON tb_staticsite USING gin(sitedesc_ts);
CREATE INDEX idx_staticsite_siteaddress ON tb_staticsite USING gin(siteaddress_ts);

 

指定词库

UPDATE tb_staticsite SET sitedesc_ts =to_tsvector('chinesecfg', sitedesc);
UPDATE tb_staticsite SET siteaddress_ts =to_tsvector('chinesecfg', siteaddress);
/*触发器性能不佳,建议使用job定时执行*/

查询

SELECT * FROM tb_staticsite WHERE sitedesc_ts @@ to_tsquery('杭州市');
SELECT * FROM tb_staticsite WHERE siteaddress_ts @@ to_tsquery('浙江省');

文档信息

Search

    Table of Contents