创建并使用pg_jieba插件

RDS PostgreSQL支持pg_jieba插件,用于中文的全文搜索。

您可以加入RDS PostgreSQL插件交流钉钉群(103525002795),进行咨询、交流和反馈,获取更多关于插件的信息。

前提条件

  • 实例大版本为RDS PostgreSQL 10或以上。

    说明

    暂不支持RDS PostgreSQL 17。

  • 如实例大版本已满足要求,但仍提示不支持,请升级内核小版本,具体操作,请参见升级内核小版本

  • 使用该插件前,需要将pg_jieba加入到shared_preload_libraries参数中。

    您可以使用RDS PostgreSQL参数设置功能,为shared_preload_libraries参数添加pg_jieba。具体操作,请参见设置实例参数

使用方法

  • 创建插件

    CREATE EXTENSION pg_jieba;
    说明

    仅高权限账号可以执行此命令。

  • 删除插件

    DROP EXTENSION pg_jieba;
    说明

    仅高权限账号可以执行此命令。

  • 使用示例1:

    SELECT * FROM to_tsvector('jiebacfg', '小明硕士毕业于中国科学院计算所,后在日本京都大学深造');
                                                     to_tsvector
    --------------------------------------------------------------------------------------------------------------
     '中国科学院':5 '于':4 '后':8 '在':9 '小明':1 '日本京都大学':10 '毕业':3 '深造':11 '硕士':2 '计算所':6 ',':7
    (1 row)
  • 使用示例2:

    SELECT * FROM to_tsvector('jiebacfg', '李小福是创新办主任也是云计算方面的专家');
                                            to_tsvector
    -------------------------------------------------------------------------------------------
     '专家':11 '主任':5 '也':6 '云计算':8 '创新':3 '办':4 '方面':9 '是':2,7 '李小福':1 '的':10
    (1 row)

扩展功能

请根据您当前已安装pg_jieba插件的版本,查看对应插件版本的扩展功能。

请使用如下SQL语句查询已安装pg_jieba插件版本:

SELECT * FROM pg_available_extensions WHERE name='pg_jieba';

1.1.0扩展功能

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

    -- 0号词典插入数据(默认0号词典,权重10)
    INSERT INTO jieba_user_dict VALUES ('阿里云');
    
    INSERT INTO jieba_user_dict VALUES ('研发工程师',0,10);
    
    
    -- 使用jieba自带词库分词
    SELECT * FROM to_tsvector('jiebacfg', 'zth是阿里云的一个研发工程师');
    to_tsvector
    ------------------------------------------------------
    'zth':1 '一个':6 '云':4 '工程师':8 '研发':7 '阿里':3
    (1 row)
    
    -- 切换自定义词典到0号,jieba_load_user_dict()中传入的参数为自定义词典序号
    SELECT jieba_load_user_dict(0);
    jieba_load_user_dict
    ----------------------
    
    (1 row)
    
    SELECT * FROM to_tsvector('jiebacfg', 'zth是阿里云的一个研发工程师');
    to_tsvector
    --------------------------------------------
    'zth':1 '一个':5 '研发工程师':6 '阿里云':3
    (1 row)
  • 支持按照偏移量显示分词结果。

    SELECT * FROM to_tsvector('jiebacfg_pos', 'zth是阿里云的一个研发工程师');
                                         to_tsvector
    --------------------------------------------------------------------------------------
     'zth:0':1 '一个:8':6 '云:6':4 '工程师:12':8 '是:3':2 '的:7':5 '研发:10':7 '阿里:4':3
    (1 row)

1.2.0扩展功能

  • 优化jieba_load_user_dict()对内存和CPU的消耗。

  • jieba_load_user_dict()新增配置参数,用于设置检索时是否使用默认词典。

    • 语法

      jieba_load_user_dict(parameter1, parameter2)
    • 参数解释

      参数

      取值说明

      parameter1

      表示加载自定义词典的词典序号。

      parameter2

      表示是否加载默认词典。

      • 0:加载默认词典

      • 1:不加载默认词典

    • 使用示例

      INSERT INTO jieba_user_dict VALUES ('阿里云');
      INSERT 0 1
      INSERT INTO jieba_user_dict VALUES ('研发工程师',0,10);
      INSERT 0 1
      
      -- 第一个0 代表自定义词典序号,第二个0 代表加载默认词典
      SELECT jieba_load_user_dict(0,0);
      jieba_load_user_dict
      ----------------------
      
      (1 row)
      SELECT * FROM to_tsvector('jiebacfg', 'zth是阿里云的一个研发工程师');
      to_tsvector
      --------------------------------------------
      'zth':1 '一个':5 '研发工程师':6 '阿里云':3
      (1 row)
      
      SELECT jieba_load_user_dict(0,1);
      jieba_load_user_dict
      ----------------------
      
      (1 row)
      
      SELECT * FROM to_tsvector('jiebacfg', 'zth是阿里云的一个研发工程师');
                           to_tsvector
      ------------------------------------------------------
      'zth':1 '一个':6 '云':4 '工程师':8 '研发':7 '阿里':3
      (1 row)
      说明

      如果表jieba_user_dict或者函数jieba_load_user_dict()不存在,请升级内核小版本到20220730,并重新安装插件。

      1. 升级内核小版本:升级内核小版本

      2. 重新安装插件:

        DROP EXTENSION pg_jieba;
        CREATE EXTENSION pg_jieba;

相关参考

此插件的更多用法,请参见pg_jieba官方文档