pgsearch內建了中文CN_SIMPLE和英文EN_SIMPLE的停用詞詞典。本文介紹如何配置和使用停用詞詞典。
版本限制
核心版本為7.2.1.0及以上的AnalyticDB for PostgreSQL7.0版執行個體。
更新詞典
停用詞的詞典儲存於pgsearch.stopword_dict表中。更新該表的資料,可以實現停用詞的添加、變更或刪除。jieba分詞器的預設詞典為default。您也可以添加多個停用詞詞典。添加停用詞時,必須指定詞典。如果指定了default以外的詞典且該詞典不存在,將新增詞典並在新增的詞典中添加停用詞;如果該詞典已存在,則直接在該詞典中添加停用詞。如果您在更新或刪除停用詞時未指定詞典,則將在所有詞典中檢索並更新或刪除指定的停用詞。
向預設詞典中插入、更新或刪除停用詞。
-- 插入停用詞“的”需要指定預設詞典“default” INSERT INTO pgsearch.stopword_dict(dict,word) VALUES('default','的'); -- 刪除預設詞典的停用詞“的” DELETE FROM pgsearch.stopword_dict WHERE dict = 'default' AND word='的'; -- 更新預設詞典的停用詞“一個” UPDATE pgsearch.stopword_dict SET word = '一個' WHERE dict = 'default' AND word = '的';向指定詞典
user_stop_cn中插入、更新或刪除停用詞。-- 插入停用詞“的” INSERT INTO pgsearch.stopword_dict(dict, word) VALUES('user_stop_cn', '的'); -- 刪除停用詞“的” DELETE FROM pgsearch.stopword_dict WHERE dict = 'user_stop_cn' AND word='的'; -- 更新停用詞為 “是” UPDATE pgsearch.stopword_dict SET word = '一個' WHERE dict = 'user_stop_cn' and word = '的';
說明
詞典名稱列dict和停用詞列word為表的聯合主鍵。因此無法向同一個詞典中插入重複的停用詞。
載入詞典
更新詞典後,需要調用SELECT pgsearch.reload_stopword_dict()將詞典重載到記憶體中。以下樣本中的user_stop_cn為詞典名稱。
SELECT pgsearch.reload_stopword_dict('user_stop_cn');將詞典載入到記憶體後,還需要按順序完成以下兩個步驟,方能使停用詞詞典對現有資料生效。
已有的資料庫會話串連需要斷開並重新串連。
更新詞典不會影響已寫入到表中的資料。如果希望詞典對已有資料生效必須重建索引。
使用詞典建立索引
在建立BM25索引時,可以通過stopword參數為jieba分詞器指定停用詞詞典。
CALL pgsearch.create_bm25(
index_name => '<index_name>',
table_name => '<table_name>',
text_fields => pgsearch.field('<column_name>', tokenizer=>pgsearch.tokenizer('jieba', SEARCH=>false, dict=>'<dict_name>', stopword=>'<stopword_dict_name>'))
);查看停用詞過濾效果
查看指定停用詞詞典的分詞效果。
SELECT pgsearch.tokenizer(pgsearch.tokenizer('jieba', stopword=>'user_stop_cn'), '同一個世界');