如何在不重启 postgres 服务器的情况下刷新停用词列表?
How to refresh stop-words list without restart postgres server?
我有带停用词的自定义搜索配置。我需要做什么才能使 postgres 服务器看到停用词列表中的更改?
更新 1
我在目录 pg10\share\postgresql\tsearch_data
中创建了文件 russian_extended.stop
。
然后我执行命令
CREATE TEXT SEARCH DICTIONARY public.russian_extended (
TEMPLATE = pg_catalog.simple,
STOPWORDS = russian_extended
);
然后
CREATE TEXT SEARCH CONFIGURATION public.russian_extended (
COPY = pg_catalog.russian
);
最后
ALTER TEXT SEARCH CONFIGURATION public.russian_extended
ALTER MAPPING
FOR asciiword, asciihword, hword_asciipart, hword, hword_part, word
WITH russian_extended;
更新 2
之后我在列表中添加了一个新词,但我不明白如何在不重新启动我的 postgres 服务器的情况下即时应用这些更改...
我错过了官方documentation中的解决方案,我的失败是我将函数to_tsvector
的结果放入列表中
ALTER TEXT SEARCH DICTIONARY public.russian_extended (StopWords=russian_extended);
根据我对源代码的阅读,文本搜索字典会在首次使用字典或缓存失效后(函数 lookup_ts_dictionary_cache
)进行初始化。
因此只要启动一个新的数据库会话就应该使停用词文件中的更改生效。
我没有验证是不是这样,你能测试一下吗?
如果您有任何全文搜索索引使用带有字典的配置并在其中更改了停用词文件,则必须重建这些索引。
我有带停用词的自定义搜索配置。我需要做什么才能使 postgres 服务器看到停用词列表中的更改?
更新 1
我在目录 pg10\share\postgresql\tsearch_data
中创建了文件 russian_extended.stop
。
然后我执行命令
CREATE TEXT SEARCH DICTIONARY public.russian_extended (
TEMPLATE = pg_catalog.simple,
STOPWORDS = russian_extended
);
然后
CREATE TEXT SEARCH CONFIGURATION public.russian_extended (
COPY = pg_catalog.russian
);
最后
ALTER TEXT SEARCH CONFIGURATION public.russian_extended
ALTER MAPPING
FOR asciiword, asciihword, hword_asciipart, hword, hword_part, word
WITH russian_extended;
更新 2
之后我在列表中添加了一个新词,但我不明白如何在不重新启动我的 postgres 服务器的情况下即时应用这些更改...
我错过了官方documentation中的解决方案,我的失败是我将函数to_tsvector
ALTER TEXT SEARCH DICTIONARY public.russian_extended (StopWords=russian_extended);
根据我对源代码的阅读,文本搜索字典会在首次使用字典或缓存失效后(函数 lookup_ts_dictionary_cache
)进行初始化。
因此只要启动一个新的数据库会话就应该使停用词文件中的更改生效。
我没有验证是不是这样,你能测试一下吗?
如果您有任何全文搜索索引使用带有字典的配置并在其中更改了停用词文件,则必须重建这些索引。