postgres中使用Zhparser中文全文索引

1、安装pg数据库

* 建议使用docker环境

* 注意不要使用太低版本的postgres数据库,比如9.5,个人反复安装都没有成功

docker pull postgres:13.5

docker run -it --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=123456 -d docker.io/postgres:13.5

2、进入pg数据库docker容器内,安装各种扩展

先执行 apt-get update ;否则无法连接外网;然后你要装啥都可以了。具体命令如下:

apt-get update
apt-get install gcc
apt-get install wget
apt-get install make
apt-get install git
apt-get install bzip2
apt install postgresql-server-dev-13
cd /tmp/
wget http://www.xunsearch.com/scws/down/scws-1.2.2.tar.bz2
tar -jxvf scws-1.2.2.tar.bz2 
cd scws-1.2.2
./configure 
make
make install
cd ..
git clone https://github.com/amutu/zhparser.git
cd zhparser/
make
make install

3、命令行进入数据库

su postgres

psql

CREATE EXTENSION zhparser;
CREATE TEXT SEARCH CONFIGURATION chinese (PARSER = zhparser);

ALTER TEXT SEARCH CONFIGURATION chinese ADD MAPPING FOR n,v,a,i,e,l WITH simple;

SELECT to_tsvector('chinese','“今年保障房新开工数量虽然有所下调,但实际的年度在建规模以及竣工规模会超以往年份,相对应的对资金的需求也会创历>史纪录。”陈国强说。在他看来,与2011年相比,2012年的保障房建设在资金配套上的压力将更为严峻。') as result;

'2011':27 '2012':29 '上':35 '下调':7 '严峻':37 '会':14 '会创':20 '保障':1,30 '压力':36 '史':21 '国强':24 '在建':10 '实际':8 '对应':17 '年份':16 '年度':9 '开工':4 '房':2 '房建':31 '数量':5 '新':3 '有所':6 '相比':28 '看来':26 '竣工':12 '纪录':22 '规模':11,13 '设在':32 '说':25 '资金':18,33 '超':15 '配套':34 '陈':23 '需求':19

SELECT to_tsquery('chinese', '保障房资金压力');

'保障' & '房' & '资金' & '压力'

4、结合业务场景,创建需要的索引

创建gin索引

create index idx_gin_tbl_xxxx on tbl_xxxx using gin(to_tsvector('chinese',name));  

使用索引进行查询

select a,b,c from tbl_xxxx where to_tsvector('chinese',name)  @@ to_tsquery('chinese','中文中文'); 

5、其他(参考过的文档)

https://github.com/amutu/zhparser

​​​​​​https://github.com/hightman/scws

Postgres中文分词 - 盆栽Charming - 博客园

centos7 postgresql13 安装 zhparser,配置中文全文检索

安装PostgreSQL-11及中文分词器Zhparser-2 - 掘金

Docker Hub

PostgreSQL 中文全文检索(之一):Zhparser 安装及使用 | PostgreSQL 中文网

使用方法:打开scws-1.2.3\win32里的解决方案文件,里面包括了scws和zhparser,另外一个是scws的php扩展不用编译 zhparserPostgresql进行中文分词的常用扩展,网上的相关资料很多,安装的教程也不少,但大多数是linux的,并没有windows的安装介绍。原因有两个方面,一个是本身像这种数据库服务器一般都是linux系统的,另外一个比较致命,zhparser本身并没提供windows环境下的编译工程,连依赖库scws的readme里也建议在linux环境下使用,或者用cygwin或mingw一类工具。对于博主这种只使用windows环境(其实Postgresql也是刚接触),连makefile也搞不明白的真是头大。好在万变不离其,编译环境只是工具,只要搞清楚个原理(看代码),移植到windows+VS的环境应该也不是难事(当然这个也只是在轻量级的库下面适用)。下面进入正题: 干货在这里 ① 编译scws:由于 zhparser是基于scws(scws是简易中文分词系统的缩写,它的原理其实很简单,基于词典,将文本的内容按照词典进行分词,提取关键字等。)做的分词,因此先要编译scws,网上下载下来的源码有vs2008的版本,因此,直接编译,后来出现头文件无法加入的错误,将相关文件编码方式修改成unicode解决(利用notepad++ 编码->转换为UTF-8编码)。 ② 编译zhparser:由于zhparser只提供了linux下面的makefile文件,想着用Mingw去编译,后来因为postgresql所在目录有空格,导致编译过程也失败。只好到vs2008里自建一个工程,建好工程后,首先把scws的头文件和库文件加进去,然后把postgresql的头文件和库文件加进去,设置项目属性为生成dll文件。 ③ 扩展安装:编译成功以后,在postgresql下面运行:create extension zhparser; 提示找不到control文件,在下载的源码文件夹里找到该文件,放到指定目录,再次运行sql,提示找不到dll文件,将dll文件放到指定目录,再运行,提示找不到zhprs_start函数,看来是dll没有正常explort出函数,修改源代码的相关函数声明,再次运行后,显示成功。但zhparser源文件下其实还有很多文件,包括一个词典文件和ini配制文件,还不知道应该放在何处。 ④ zhparser运行环境配制:运行测试sql语句,发现并没有实现分词,想起来应该是词典位置不正确,到zhparser源码去搜寻,发现如下代码,看来是放到tsearch_data目录下面,用同样的方法找到ini文件的目录,将它们都放进去,再次运行测试代码,得到正确结果。 测试代码: REATE EXTENSION zhparser; -- make test configuration using parser CREATE TEXT SEARCH CONFIGURATION testzhcfg (PARSER = zhparser); ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple; select to_tsvector('testzhcfg','南京市长江大桥');
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扬子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值