zhparser
https://github.com/amutu/zhparser
1、scws编译
因为zhparser需要使用scws进行中文分词先编译scws,zhparser的README有scws源码的下载地址(http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2),下载解压后win32目录有vs2008工程直接升级为vs2017,打开后里面包含两个工程我们需要的只是libscws工程(scws工程引用了php的东西 不用编译),修改libscws项目配置以便编译通过:xdict.h需要转换为utf16编码、config_win32.h注释掉logf定义以及一些工程项目的配置如支持x64编译;
2、编译zhparser
zhparser就两个.c跟.h文件,直接vs创建个新dll工程把这两个文件加入进去,加入包含目录libscws、PostgreSQL12安装目录下的include相关的目录(例 PostgreSQL\12\include\server PostgreSQL\12\include PostgreSQL\12\include\server\port\win32)
加入依赖的库postgres.lib、上面的libscws.lib 编译zhparser成功
3、插件加入PostgreSQL
zhparser.dll => PostgreSQL12安装目录的lib(PostgreSQL\12\lib);
zhparser.control zhparser--2.1.sql zhparser--unpackaged--1.0.sql => PostgreSQL12安装目录的PostgreSQL\12\share\extension;
rules.utf8.ini dict.utf8.xdb => PostgreSQL12安装目录的PostgreSQL\12\share\tsearch_data;
4、使用
zhparser的README有使用例子
也可参考这篇文章 https://zhuanlan.zhihu.com/p/30801646
-- create the extension
CREATE EXTENSION zhparser;
-- make test configuration using parser
CREATE TEXT SEARCH CONFIGURATION testzhcfg (PARSER = zhparser);
-- add token mapping
ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;
create index idx_name on table using gin(to_tsvector('parser_name', field));
SELECT * FROM table WHERE to_tsvector('parser_name', field) @@ '测试'
SELECT * FROM table WHERE to_tsvector('parser_name', field) @@ to_tsquery('parser_name','测试')