我正在使用带有英语词典的完整测试搜索的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)
这是一个保留字吗?如果是这样,“逃避”保留字的最佳方式是什么?
答案 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
进行全文搜索之前:
标记您的文本
用“信息技术”代替“ IT”一词
在使用to_tsquery进行搜索之前:
标记搜索查询文本
用“信息技术”代替“ IT”一词
您在英语“ it”和“ IT”之间不再存在冲突,这在大多数情况下应该可以解决。也许您还可以在执行此操作之前尝试使用其他关键字来检测上下文。
完全可以在数据库中完成此操作,但是在大多数应用程序中,可以通过您的主服务器/程序通用语言来完成。