全部產品
Search
文件中心

PolarDB:pg_jieba(中文分詞)

更新時間:Oct 22, 2024

pg_jieba是一個開源第三方外掛程式,用於中文的全文檢索搜尋。

前提條件

支援的PolarDB PostgreSQL版的版本如下:

  • PostgreSQL 15(核心小版本15.7.2.0及以上)

  • PostgreSQL 14(核心小版本14.5.2.0及以上)

  • PostgreSQL 11(核心小版本1.1.28及以上)

說明

您可通過如下語句查看PolarDB PostgreSQL版的核心小版本號碼:

  • PostgreSQL 15PostgreSQL 14

    SELECT version();
  • PostgreSQL 11

    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)