【问题标题】:PostgreSQL Full Text Search and reserved words, preserving some wordsPostgreSQL全文搜索和保留字,保留一些字
【发布时间】:2013-10-02 10:35:15
【问题描述】:

我正在使用带有英文字典的完整测试搜索的 Postgresql。当我想接收带有一些英文单词的记录时,我会得到非常可靠的结果。

所以:

SELECT id FROM table1 WHERE ts_vector1 @@ to_tsquery('it')

返回 0 个结果。

SELECT id FROM table1 WHERE ts_vector1 @@ to_tsquery('specialist & it')

返回超过 0 个结果(单词 'it' 存在于表和索引中)。 ts_vector1 创建如下:

ts_vector1 = to_tsvector('english', some_text_column)

'it' 是保留字吗?如果是这样,“转义”保留字的最佳方法是什么?

【问题讨论】:

    标签: postgresql full-text-search tsvector


    【解决方案1】:

    根据相关文档,“它”作为停用词被忽略:

    http://www.postgresql.org/docs/current/static/textsearch-controls.html

    在上面的示例中,我们看到生成的 tsvector 不包含单词 a、on 或 it,单词rats 变成了 rat,标点符号 - 被忽略了。

    您可以通过配置所需的字典来更改停用词列表:

    http://www.postgresql.org/docs/current/static/textsearch-dictionaries.html

    【讨论】:

      【解决方案2】:

      好的,2013 年已经过去了,但问题仍然存在。 您想删除“它”,因为它是噪音,但保留“它”这个词。 信息技术的“it”通常写成“IT”。

      在通过to_tsvector 提供全文搜索之前:

      1. 标记您的文本

      2. 将“IT”一词替换为“信息技术”

      在使用 to_tsquery 进行搜索之前:

      1. 对搜索查询文本进行标记

      2. 将“IT”一词替换为“信息技术”

      您不再有英文“it”和“IT”之间的冲突,这在大多数情况下应该有效。或许您也可以在执行此操作之前尝试使用其他关键字来检测上下文。

      完全在数据库中执行此操作可能是可能的,但在大多数应用程序中,这可以通过您的主服务器/程序通用语言来完成。

      【讨论】:

        猜你喜欢
        • 2020-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多