配置停用词词典
更新时间:
pgsearch内置了中文CN_SIMPLE
和英文EN_SIMPLE
的停用词词典。本文介绍如何配置和使用停用词词典。
版本限制
内核版本为7.2.0.1及以上的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'), '同一个世界');
文档内容是否对您有帮助?