##概述
全文检索相比模糊检索,具有以下优势:
1 正规化
2 根据近似度进行排名
3 可以使用索引
数据样例
tmp.txt
888,A019,000000428601,0000,00000,"",0000,大连业务支持中心,20200410,165004,22
888,A019,000000010632,0000,00001,"",0000,万达广场5楼,20200623,083204,23
888,A019,000000428609,0000,00000,"",0000,国家电网维护站,20200410,165004,24
888,A019,000000428637,0000,00000,"",0000,西宁市工信委办公楼,20200410,165004,25
~100万条
安装全中文检索支持
zhparser是基于Simple Chinese Word Segmentation(SCWS)中文分词库实现的一个扩展,作者 amutu,源码 https://github.com/amutu/zhparser。
create extension zhparser;
新增检索配置
CREATE TEXT SEARCH CONFIGURATION testzhcfg (PARSER = zhparser);
增加标记字典
其中simple为一个字典模板
ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;
建表语句
create table anlh_tmp(
mandt varchar(20) default '000' not null,
bukrs varchar(20) default '' not null,
anln1 varchar(50) default '' not null,
luntn varchar(20) default '',
lanep varchar(20) default '00000',
anupd varchar(20) default '',
funtn varchar(20) default '',
anlhtxt text default '',
zdate varchar(32) default '00000000',
ztime varchar(32) default '000000',
mykey serial primary key
);
导入数据
\copy anlh_tmp from '/home/postgres/tmp.txt' DELIMITER ',' csv;
建立分词库
create table anlh_ts(mykey int,anlhtxt tsvector);
insert into anlh_ts select mykey,to_tsvector('testzhcfg',anlhtxt) from anlh_tmp;
select count(*) from anlh_tmp where anlhtxt like '%办公室%';
select count(*) from anlh_tmp t join anlh_ts s on t.mykey=s.mykey where s.anlhtxt @@ to_tsquery('testzhcfg','办公室');
查看执行计划
explain select count(*) from anlh_tmp where anlhtxt like '%办公室%'; explain select count(*) from anlh_tmp t join anlh_ts s on t.mykey=s.mykey where s.anlhtxt @@ to_tsquery('testzhcfg','办公室');
进行排名
SELECT anlhtxt, ts_rank_cd(to_tsvector('testzhcfg',anlhtxt),to_tsquery('testzhcfg','办公室') ) AS rank
FROM anlh_tmp
ORDER BY rank DESC
limit 5;
anlhtxt | rank
----------------------------------------------------------------+------
美兰机场办公室外墙光分箱-机场办公室ZHX | 0.2
办公室,二车间办公室 | 0.2
均安鸿达服装公司办公室至鸿达服装办公室基站 | 0.2
凤凰南路59号香洲图书馆3F办公室墙壁 | 0.1
市信息大厦12楼办公室 | 0.1
(5 rows)
最后,把上面的SQL引用到用户搜索页即可。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




