云原生数据仓库AnalyticDB PostgreSQL版支持使用pg_jieba插件对中文文本进行分词,从而实现高效的中文全文检索。

pg_jieba简介

Jieba(结巴)是目前比较流行的中文分词库之一,能够准确地识别中文语句中的单词,对中文语句进行分词。pg_jieba插件将Jieba的分词能力引入到PostgreSQL数据库中,使得PostgreSQL能够更有效地进行中文全文检索。云原生数据仓库 AnalyticDB PostgreSQL 版支持在分布式查询中使用pg_jieba插件。

前提条件

同时满足以下条件的实例支持pg_jieba插件:

  • 实例资源类型为存储弹性模式

  • 引擎版本为6.0时,小版本需要为V6.6.2.1及以上;引擎版本为7.0时,小版本需要为V7.0.5及以上

    说明

    如何查看实例内核版本,请参见查看内核小版本

安装pg_jieba插件

  1. 安装插件:使用Jieba中文分词库之前,您需要在云原生数据仓库 AnalyticDB PostgreSQL 版实例插件管理中安装pg_jieba插件。具体操作,请参见安装、升级与卸载插件

  2. 检查插件是否安装成功:切换到指定数据库的public模式下,执行如下命令。

    SELECT * FROM pg_extension WHERE extname = 'pg_jieba';

    返回如下结果,表示pg_jieba插件已成功安装。如未返回结果,表示指定数据库的public模式下没有安装pg_jieba插件。

    +--------+--------+--------+--------+
    |oid     |extname |extowner|...     |
    +--------+--------+--------+--------+
    |17194   |pg_jieba|10.     |...     |
    +--------+--------+--------+--------+

中文分词检索

安装插件后,即可开始使用默认分词配置进行中文分词查询。

示例1:

SELECT to_tsvector('jiebacfg', '有两种方法进行全文检索');

返回结果如下。

+---------------------------------------+
|               to_tsvector             |  
+---------------------------------------+
|'两种':2 '全文检索':5 '方法':3 '进行':4   |
+---------------------------------------+
(1 row)

示例2:

SELECT to_tsvector('jiebacfg', '有两种方法进行全文检索') @@ to_tsquery('jiebacfg', '全文检索');
+----------+
| ?column? |  
+----------+
| t        |
+----------+
(1 row)

自定义词典

云原生数据仓库 AnalyticDB PostgreSQL 版的pg_jieba插件支持自定义词典。通过向自定义词典表jieba.jieba_custom_word写入或删除数据,实现添加或删除自定义词。

说明
  • 您无需手动创建词典表。安装pg_jieba插件时,系统会自动创建词典表jieba.jieba_custom_word

  • 词典表jieba.jieba_custom_word的表结构如下:

    CREATE TABLE jieba.jieba_custom_word
    (
    	word    text primary key,     -- 自定义词
    	weight  float8 default '1.0', -- 权重
    	type    text   default 'x'    -- 词性
    );

申请权限

提交工单,在工单中申请自定义词典的使用权限。完成申请后,您可以向自定义词典中添加词、删除词和查询词,并使用自定义词典进行分词检索。

添加自定义词

INSERT INTO jieba.jieba_custom_word values('两种方法');

删除自定义词

DELETE FROM jieba.jieba_custom_word WHERE word='两种方法';

查询自定义词典表

SELECT * FROM jieba.jieba_custom_word;

加载自定义词典表

在添加或删除词之后,需要重新加载自定义词典表,新的自定义词典表才能生效。重新加载自定义词典表的命令如下。

SELECT jieba.jieba_load_user_dict();

自定义分词的检索效果

在配置自定义词典表前后,分别执行示例语句,验证分词结果。示例语句如下。

SELECT to_tsvector('jiebacfg', '有两种方法进行全文检索');

返回结果如下。

场景

未配置自定义词典表

在词典表中添加词“两种方法”

分词检索效果

+---------------------------------------+
|               to_tsvector             |  
+---------------------------------------+
|'两种':2 '全文检索':5 '方法':3 '进行':4   |
+---------------------------------------+
(1 row)
+---------------------------------------+
|               to_tsvector             |  
+---------------------------------------+
| '两种方法':2 '全文检索':4 '进行':3       |
+---------------------------------------+
(1 row)

相关文档