在这篇文章中,介绍了PostgreSQL的全文检索系统,里面有提到,PostgreSQL默认是不支持中文的。看下面的例子。

说明没有按照我们的意愿分词,我们可以自己来看看PostgreSQL是怎么分词的。只要用to_tsvector这个指令就好了。

  1. to_tsvector
  2. ---------------------------------------------------------------------------------
  3. '-2':8 '2015':1 'inc':3 'rails365':2 'reserv':6 'right':5 '粤icp备15004902号':7
  4. (1 row)

明显不符合我们的意愿。”粤icp备15004902号”应该被更详细的切分的。至少把”icp”,”号“等分开。

它切好的词大概是这样的。

每个词都是以空格分开的。这样才是比较符合的。所以我们需要一款中文分词的PostgreSQL插件。

是一款中文分词的PostgreSQL插件。我使用过,效果不错,故推荐。

  1. # 下载并解压
  2. wget -q -O - http://www.xunsearch.com/scws/down/scws-1.2.2.tar.bz2 | tar xvjf -
  3. # 编译安装
  4. cd scws-1.2.2 ; ./configure ; sudo make install
  1. sudo -u postgres psql
  2. # 连接数据库
  3. \c rails365_pro
  4. CREATE EXTENSION zhparser;
  5. CREATE TEXT SEARCH CONFIGURATION testzhcfg (PARSER = zhparser);
  6. ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;

接下来我们来测试一下,是不是按照我们的意愿来分词。

果然,切好词了。

还可以这样使用。

  1. postgres=# SELECT * FROM ts_parse('zhparser', '2015 - Rails365 Inc. All rights reserved. | 粤ICP备15004902号-2');
  2. tokid | token
  3. -------+----------
  4. 101 | 2015
  5. 117 | -
  6. 101 | Rails
  7. 101 | 365
  8. 117 | .
  9. 101 | rights
  10. 101 | reserved
  11. 117 | .
  12. 117 | |
  13. 106 |
  14. 101 | ICP
  15. 118 |
  16. 101 | 15004902
  17. 110 |
  18. 117 | -
  19. 101 | 2
  20. (18 rows)

完结。