这个方法是借用PG的插件zhparser,要求PG的版本在9.2以上,在GP上实现的话,目前需要GP6.0以上的版本,因为6.0集成的是 9.4beta1。
由于是在集群上使用,所以下面的所有操作都要同时在每个节点上操作。
- 安装SCWS
- 下载scws
- 解压缩 tar -vfx
- ./configure
- make && make install
- 安装SCWS,make install时必须root用户
- 安装zhparser
- 下载zhparser
- 查找当前系统里pg_config文件的位置,通常GP安装后,是在每个节点上的 $GPDB$/bin/pg_config
- 使用gpadmin用户,在每个节点上同时执行,PG_CONFIG= $GPDB$/bin/pg_config make &&
- 修改master上的pg_hba.conf文件,使所有节点可以直接登录数据库
- make install,执行成功后,会在每个节点的%GPDB%/share/postgresql/extension下复制需要的扩展文件zhparser–1.0.sql,在每个节点上分别执行 psql -d gpdb_test -f ./zhparser--1.0.sql,非master节点上要增加-h选项
- 引入文件成功,从master节点分布登录每个节点,PGOPTIONS='-c gp_session_role=utility' psql -h node02 gpdb_test -p 40000,然后执行 create extension zhparser;完成扩展安装,实现zhparser的全文检索。
- 使用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;
- -- ts_parse
SELECT * FROM ts_parse('zhparser', 'hello world! 2010年保障房建设在全国范围内获全面启动,从中央到地方纷纷加大 了保障房的建设和投入力度 。2011年,保障房进入了更大规模的建设阶段。住房城乡建设部党组书记、部长姜伟新去年底在全国住房城乡建设工作会议上表示,要继续推进保障性安居工程建设。');
- -- test to_tsvector
SELECT to_tsvector('testzhcfg','“今年保障房新开工数量虽然有所下调,但实际的年度在建规模以及竣工规模会超以往年份,相对应的对资金的需求也会创历>史纪录。”陈国强说。在他看来,与2011年相比,2012年的保障房建设在资金配套上的压力将更为严峻。');
- -- test to_tsquery
SELECT to_tsquery('testzhcfg', '保障房资金压力');
使用自动以词库:
** 详解 TXT 词库的写法 (TXT词库目前已兼容 cli/scws_gen_dict 所用的文本词库) **
- 每行一条记录,以 # 或 分号开头的相当于注释,忽略跳过。
- 每行由4个字段组成,依次为“词语"(由中文字或3个以下的字母合成), "TF", "IDF", "词性",字段使用空格或制表符分开,数量不限,可自行对齐以美化。
- 除“词语”外,其它字段可忽略不写。若忽略,TF和IDF默认值为 1.0 而 词性为 "@"。
- 由于 TXT 库动态加载(内部监测文件修改时间自动转换成 xdb 存于系统临时目录),故建议TXT词库不要过大。
- 删除词做法,请将词性设为“!“,则表示该词设为无效,即使在其它核心库中存在该词也视为无效
注意:1.自定义词典的格式可以是文本TXT,也可以是二进制的XDB格式。XDB格式效率更高,适合大辞典使用。可以使用scws自带的工具scws-gen-dict将文本词典转换为XDB格式;2.zhparser默认的词典是简体中文,如果需要繁体中文,可以在这里下载已经生成好的XDB格式此词典。3.自定义词典的例子可以参考dict_extra.txt。更多信息参见SCWS官方文档。
配置
编辑master节点的postgresql.conf文件,增加以下内容:
zhparser.punctuation_ignore = f 忽略所有的标点等特殊符号
zhparser.seg_with_duality = f 闲散文字自动以二字分词法聚合
zhparser.dict_in_memory = f 将词典全部加载到内存里:
zhparser.multi_short = f 短词复合
zhparser.multi_duality = f 散字二元复合
zhparser.multi_zmain = f 重要单字复合
zhparser.multi_zall = f 全部单字复合
设置自定义词典
zhparser.extra_dicts = 'dict_extra.txt,mydict.xdb'