tom*_*omd 35 postgresql full-text-search
我正在使用PostgreSQL全文搜索一个项目,其中传统的停止词('a','the','if'等)应该被索引和搜索,这不是默认行为.例如,我可能希望我的用户找到查询的结果"是或不是".
该文件表明,我可以通过创建一个空的禁用词词典做到这一点$SHAREDIR/tsearch_data/english.stop(例如),但这将部署复杂化; 我希望能够使用SQL配置PostgreSQL的停止字处理.这可能吗?如果是这样,您能提供示例SQL语句吗?
cat*_*ave 49
根据您对上一个答案的评论,您可以轻松地在使用无停止词和所有停用词之间切换.您可以使用自定义搜索配置来实现此目的:
(1)您可以在不使用停用词文件的情况下创建自定义词典,例如:
CREATE TEXT SEARCH DICTIONARY english_stem_nostop (
Template = snowball
, Language = english
);
Run Code Online (Sandbox Code Playgroud)
注意,在上面我遗漏了StopWords参数.
(2)然后创建一个新配置以使用新词典:
CREATE TEXT SEARCH CONFIGURATION public.english_nostop ( COPY = pg_catalog.english );
ALTER TEXT SEARCH CONFIGURATION public.english_nostop
ALTER MAPPING FOR asciiword, asciihword, hword_asciipart, hword, hword_part, word WITH english_stem_nostop;
Run Code Online (Sandbox Code Playgroud)
(3)然后,当搜索指定您想要使用的配置时(或者您可以default_text_search_config每次更改选项),例如:
SELECT
title
FROM
articles
WHERE
to_tsvector('english_nostop', COALESCE(title,'') || ' ' || COALESCE(body,''))
@@ to_tsquery('english_nostop', 'how & to');
Run Code Online (Sandbox Code Playgroud)
您可以'english'在上面的SQL中指定使用普通配置.
请注意,在此示例中,使用标准配置将导致通知,因为只有停用词.
但请记住以下内容:
| 归档时间: |
|
| 查看次数: |
6892 次 |
| 最近记录: |