全部產品
Search
文件中心

AnalyticDB:配置停用詞詞典

更新時間:Mar 13, 2025

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');

將詞典載入到記憶體後,還需要按順序完成以下兩個步驟,方能使停用詞詞典對現有資料生效。

  1. 已有的資料庫會話串連需要斷開並重新串連。

  2. 更新詞典不會影響已寫入到表中的資料。如果希望詞典對已有資料生效必須重建索引。

使用詞典建立索引

在建立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'), '同一個世界');