开发者社区> 问答> 正文

【RDS】如何在RDS PostgreSQL中使用中文分词?

已解决

如何在RDS PostgreSQL中使用中文分词?

展开
收起
云上猫猫 2022-01-14 15:46:34 894 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    启用中文分词

    可以参考如下SQL语句,启用中文分词。

    注:

    • 分词插件zhparser无法安装到pg_catalog schema。

    • 必须有目标schema的写入权限。

    • 需要使用超级权限执行alter role all set zhparser.multi_short=on;,且RDS PostgreSQL版不支持超级用户修改,可提交工单进行修改。若不提交工单,则执行set zhparser.multi_short=on;,即在会话层进行修改。

    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;
    alter role all set zhparser.multi_short=on;
    SELECT * FROM ts_parse('zhparser', 'hello world! 2010年保障房建设在全国范围内获全面启动,从中央到地方纷纷加大 了 保 障 房 的 建 设 和 投 入 力 度 。2011年,保障房进入了更大规模的建设阶段。住房城乡建设部党组书记、部长姜伟新去年底在全国住房城乡建设工作会议上表示,要继续推进保障性安居工程建设。');
    SELECT to_tsvector('testzhcfg','“今年保障房新开工数量虽然有所下调,但实际的年度在建规模以及竣工规模会超以往年份,相对应的对资金的需求也会创历史纪录。”陈国强说。在他看来,与2011年相比,2012年的保障房建设在资金配套上的压力将更为严峻。');
    SELECT to_tsquery('testzhcfg', '保障房资金压力');
    

    利用分词进行全文索引的方法如下。其中第一个SQL语句为T1表的name字段创建全文索引。第二个SQL语句使用全文索引。

    create index idx_t1 on t1 using gin (to_tsvector('zhcfg',upper(name) ));
    select * from t1 where to_tsvector('zhcfg',upper(t1.name)) @@ to_tsquery('zhcfg','(防火)');
    

    自定义中文分词词典

    自定义中文分词词典的示例如下。其中第二个SQL语句为往自定义分词词典中插入新的分词。第三个SQL语句为使新的分词生效。第四个SQL语句为重新查询,获取新的分词结果。

    SELECT to_tsquery('testzhcfg', '保障房资金压力');
    insert into pg_ts_custom_word values ('保障房资');
    select zhprs_sync_dict_xdb();
    SELECT to_tsquery('testzhcfg', '保障房资金压力');
    

    提示:内核小版本20160801及之后的版本才支持自定义中文分词词典,您可以通过show rds_release_date ;SQL语句进行查询内核版本。使用自定义分词的注意事项如下。

    • 最多支持一百万条自定义分词,超出部分不做处理,用户必须保证分词数量在这个范围之内。自定义分词与缺省的分词词典将共同产生作用。

    • 每个词的最大长度为128字节,超出部分将会截取。

    • 通过增删改分词之后必须执行select zhprs_sync_dict_xdb();SQL语句,并且重新建立连接才会生效。

    2022-01-14 15:49:14
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像