PostgreSQL全文搜索和保留字,保留一些单词

时间:2013-10-02 10:35:15

标签: postgresql full-text-search tsvector

我正在使用带有英语词典的完整测试搜索的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)

这是一个保留字吗?如果是这样,“逃避”保留字的最佳方式是什么?

2 个答案:

答案 0 :(得分:3)

根据相关文档,

'它'被忽略为停用词:

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

  

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

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

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

答案 1 :(得分:0)

好的,所以2013年已经过去了,但是问题仍然有效。 您要删除“ it”,因为它是噪音,但请保留“ IT”一词。 通常,将信息技术的“ it”写为“ IT”。

通过to_tsvector进行全文搜索之前:

  1. 标记您的文本

  2. 用“信息技术”代替“ IT”一词

在使用to_tsquery进行搜索之前:

  1. 标记搜索查询文本

  2. 用“信息技术”代替“ IT”一词

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

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