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

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

概述我正在使用PostgreSQL全文搜索一个项目,其中传统的停用词(‘a’,’the’,’if’等)应该被索引和搜索,这不是默认行为。例如,我可能希望我的用户查找“是或否”查询的结果。 documentation表明我可以通过在$ SHAREDIR / tsearch_data / english.stop(例如)中创建一个空的停用词字典来实现这一点,但这会使部署复杂化;我希望能够使用SQL配置Po 我正在使用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    TitleFROM    articlesWHERE    to_tsvector('english_nostop',COALESCE(Title,'') || ' ' || COALESCE(body,''))    @@ to_tsquery('english_nostop','how & to');

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

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

但请记住以下内容:

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

总结

以上是内存溢出为你收集整理的我是否可以通过编程方式配置PostgreSQL以消除全文搜索中的停用词?全部内容,希望文章能够帮你解决我是否可以通过编程方式配置PostgreSQL以消除全文搜索中的停用词?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1170712.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存