pg_jieba(中文分词)

pg_jieba是一个开源第三方插件,用于中文的全文搜索。

前提条件

支持的PolarDB PostgreSQL版(兼容Oracle)版本如下:

  • Oracle语法兼容 2.0(内核小版本2.0.14.2.0及以上)

  • Oracle语法兼容 1.0(内核小版本1.1.28及以上)

说明

您可通过如下语句查看PolarDB PostgreSQL版(兼容Oracle)的内核小版本号:

SHOW polar_version;

简介

pg_jieba插件提供了以下可选的文本搜索配置:

  • jiebacfg:精确模式,将文本精确切分,不存在冗余的词语。

  • jiebaqry:全模式,将文本中所有可以匹配的词语都扫描出来,可能存在冗余的词语。

  • jiebacfg_pos:精确模式(带下标位置),在精确模式的结果基础上添加每个词语的位置下标信息,并且在精确模式下被忽略的停用词(出现太频繁以至于在搜索中起不到作用的词语)也会显示。

使用方法

安装/卸载插件

说明

仅高权限账号可以执行安装/卸载插件命令。

  • 安装插件

    CREATE EXTENSION pg_jieba;
  • 卸载插件

    DROP EXTENSION pg_jieba;

使用示例

示例一

  • jiebacfg精确模式配置。

    SELECT * FROM to_tsvector('jiebacfg', '小明硕士毕业于中国科学院计算所,后在日本京都大学深造');

    显示结果如下:

                                       to_tsvector
    ----------------------------------------------------------------------------------
     '中国科学院':5 '小明':1 '日本京都大学':10 '毕业':3 '深造':11 '硕士':2 '计算所':6
    (1 row)
  • jiebaqry全模式配置。

    SELECT * FROM to_tsvector('jiebaqry', '小明硕士毕业于中国科学院计算所,后在日本京都大学深造');

    显示结果如下:

                                                                               to_tsvector
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     '中国':5 '中国科学院':9 '京都':16 '大学':17 '学院':7 '小明':1 '日本':15 '日本京都大学':18 '毕业':3 '深造':19 '硕士':2 '科学':6 '科学院':8 '计算':10 '计算所':11
    (1 row)
  • jiebacfg_pos精确模式带下标配置。

    SELECT * FROM to_tsvector('jiebacfg_pos', '小明硕士毕业于中国科学院计算所,后在日本京都大学深造');

    显示结果如下:

                                                                   to_tsvector                                                                
    ------------------------------------------------------------------------------------------------------------------------------------------
     '中国科学院:7':5 '于:6':4 '后:16':8 '在:17':9 '小明:0':1 '日本京都大学:18':10 '毕业:4':3 '深造:24':11 '硕士:2':2 '计算所:12':6 ',:15':7
    (1 row)

示例二

  • jiebacfg精确模式配置。

    SELECT * FROM to_tsvector('jiebacfg', '李小福是创新办主任也是云计算方面的专家');

    显示结果如下:

                                to_tsvector
    -------------------------------------------------------------------
     '专家':11 '主任':5 '云计算':8 '创新':3 '办':4 '方面':9 '李小福':1
    (1 row)
  • jiebaqry全模式配置。

    SELECT * FROM to_tsvector('jiebaqry', '李小福是创新办主任也是云计算方面的专家');

    显示结果如下:

                                     to_tsvector
    -----------------------------------------------------------------------------
     '专家':12 '主任':5 '云计算':9 '创新':3 '办':4 '方面':10 '李小福':1 '计算':8
    (1 row)
  • jiebacfg_pos精确模式带下标配置。

    SELECT * FROM to_tsvector('jiebacfg_pos', '李小福是创新办主任也是云计算方面的专家');

    显示结果如下:

                                                            to_tsvector                                                        
    ---------------------------------------------------------------------------------------------------------------------------
     '专家:17':11 '主任:7':5 '也:9':6 '云计算:11':8 '创新:4':3 '办:6':4 '方面:14':9 '是:10':7 '是:3':2 '李小福:0':1 '的:16':10
    (1 row)

扩展功能

pg_jieba支持配置多个自定义词库并切换。

说明

使用自定义词库的功能,必须将pg_jieba添加到shared_preload_libraries参数中。您可以通过控制台设置shared_preload_libraries参数,详细操作请参考设置集群参数。修改该参数后集群将会重启,请在修改参数前做好业务安排,谨慎操作。

  1. 向0号词典插入数据(默认0号词典,权重10)。

    INSERT INTO jieba_user_dict VALUES ('阿里云');
    INSERT INTO jieba_user_dict VALUES ('研发工程师',0,10);
  2. 使用jieba自带词库分词。

    SELECT * FROM to_tsvector('jiebacfg', 'zth是阿里云的一个研发工程师');

    显示结果如下:

                         to_tsvector
    ------------------------------------------------------
     'zth':1 '一个':6 '云':4 '工程师':8 '研发':7 '阿里':3
    (1 row)
                        
  3. 切换到0号自定义词典。

    SELECT jieba_load_user_dict(0);

    显示结果如下:

     jieba_load_user_dict
    ----------------------
    
    (1 row)
  4. 使用0号词典分词。

    SELECT * FROM to_tsvector('jiebacfg', 'zth是阿里云的一个研发工程师');

    显示结果如下:

                    to_tsvector
    --------------------------------------------
     'zth':1 '一个':5 '研发工程师':6 '阿里云':3
    (1 row)