我是否可以通过编程方式配置PostgreSQL以消除全文搜索中的停用词?

前端之家收集整理的这篇文章主要介绍了我是否可以通过编程方式配置PostgreSQL以消除全文搜索中的停用词?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Postgresql全文搜索一个项目,其中传统的停用词(‘a’,’the’,’if’等)应该被索引和搜索,这不是默认行为。例如,我可能希望我的用户查找“是或否”查询的结果。

documentation表明我可以通过在$ SHAREDIR / tsearch_data / english.stop(例如)中创建一个空的停用词字典来实现这一点,但这会使部署复杂化;我希望能够使用sql配置Postgresql的停止字处理。这可能吗?如果是这样,你能提供一个示例sql语句吗?

根据您对上一个答案的评论,您可以轻松地在使用无停止词和所有停用词之间切换。
您可以使用自定义搜索配置来实现此目的:

(1)您可以在不使用停用词文件的情况下创建自定义词典,例如:

CREATE TEXT SEARCH DICTIONARY english_stem_nostop (
    Template = snowball,Language = english
);

注意,在上面我省略了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;

(3)然后,当搜索指定您想要使用的配置时(或者您可以每次更改default_text_search_config选项),例如:

SELECT
    title
FROM
    articles
WHERE
    to_tsvector('english_nostop',COALESCE(title,'') || ' ' || COALESCE(body,''))
    @@ to_tsquery('english_nostop','how & to');

您可以在上面的sql中指定’english’来使用普通配置。

请注意,在此示例中,使用标准配置将导致通知,因为只有停用词。

但请记住以下内容

>如果使用索引,则每个配置需要两个 – 一个。 (参见这些文档:tsearch tablestriggers)。
>根据上面的步骤#2,仔细检查要使用此映射的解析器标记(参见Parsers)。

猜你在找的Postgre SQL相关文章