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
參數,詳細操作請參考設置集群參數。修改該參數后集群將會重啟,請在修改參數前做好業務安排,謹慎操作。
向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號自定義詞典。
SELECT jieba_load_user_dict(0);
顯示結果如下:
jieba_load_user_dict ---------------------- (1 row)
使用0號詞典分詞。
SELECT * FROM to_tsvector('jiebacfg', 'zth是阿里云的一個研發工程師');
顯示結果如下:
to_tsvector -------------------------------------------- 'zth':1 '一個':5 '研發工程師':6 '阿里云':3 (1 row)