在Greenplum中使用zhparser实现全文检索

这个方法是借用PG的插件zhparser,要求PG的版本在9.2以上,在GP上实现的话,目前需要GP6.0以上的版本,因为6.0集成的是 9.4beta1。

由于是在集群上使用,所以下面的所有操作都要同时在每个节点上操作。

  1. 安装SCWS
    1. 下载scws
    2. 解压缩 tar -vfx
    3. ./configure
    4. make && make install
    5. 安装SCWS,make install时必须root用户
  2. 安装zhparser
    1. 下载zhparser
    2. 查找当前系统里pg_config文件的位置,通常GP安装后,是在每个节点上的 $GPDB$/bin/pg_config
    3. 使用gpadmin用户,在每个节点上同时执行,PG_CONFIG= $GPDB$/bin/pg_config make &&
    4. 修改master上的pg_hba.conf文件,使所有节点可以直接登录数据库
    5. make install,执行成功后,会在每个节点的%GPDB%/share/postgresql/extension下复制需要的扩展文件zhparser–1.0.sql,在每个节点上分别执行 psql -d gpdb_test -f ./zhparser--1.0.sql,非master节点上要增加-h选项
    6. 引入文件成功,从master节点分布登录每个节点,PGOPTIONS='-c gp_session_role=utility' psql -h node02  gpdb_test -p 40000,然后执行 create extension zhparser;完成扩展安装,实现zhparser的全文检索。
  3. 使用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'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

你说我听海绵宝宝派大星

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

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

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

打赏作者

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

抵扣说明:

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

余额充值