在这篇文章中,介绍了PostgreSQL的全文检索系统,里面有提到,PostgreSQL默认是不支持中文的。看下面的例子。
说明没有按照我们的意愿分词,我们可以自己来看看PostgreSQL是怎么分词的。只要用to_tsvector这个指令就好了。
to_tsvector
---------------------------------------------------------------------------------
'-2':8 '2015':1 'inc':3 'rails365':2 'reserv':6 'right':5 '粤icp备15004902号':7
(1 row)
明显不符合我们的意愿。”粤icp备15004902号”应该被更详细的切分的。至少把”icp”,”号“等分开。
它切好的词大概是这样的。
每个词都是以空格分开的。这样才是比较符合的。所以我们需要一款中文分词的PostgreSQL插件。
是一款中文分词的PostgreSQL插件。我使用过,效果不错,故推荐。
# 下载并解压
wget -q -O - http://www.xunsearch.com/scws/down/scws-1.2.2.tar.bz2 | tar xvjf -
# 编译安装
cd scws-1.2.2 ; ./configure ; sudo make install
sudo -u postgres psql
# 连接数据库
\c rails365_pro
CREATE EXTENSION zhparser;
CREATE TEXT SEARCH CONFIGURATION testzhcfg (PARSER = zhparser);
ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;
接下来我们来测试一下,是不是按照我们的意愿来分词。
果然,切好词了。
还可以这样使用。
postgres=# SELECT * FROM ts_parse('zhparser', '2015 - Rails365 Inc. All rights reserved. | 粤ICP备15004902号-2');
tokid | token
-------+----------
101 | 2015
117 | -
101 | Rails
101 | 365
117 | .
101 | rights
101 | reserved
117 | .
117 | |
106 | 粤
101 | ICP
118 | 备
101 | 15004902
110 | 号
117 | -
101 | 2
(18 rows)
完结。