Postgresql:如何使全文搜索忽略某些令牌?

时间:2009-05-22 07:46:27

标签: postgresql full-text-search

是否有一个魔术函数或运算符来忽略某些标记?

select to_tsvector('the quick. brown fox') @@ 'brown' -- returns true

select to_tsvector('the quick,brown fox') @@ 'brown' -- returns true

select to_tsvector('the quick.brown fox') @@ 'brown' -- returns false, should return true

select to_tsvector('the quick/brown fox') @@ 'brown' -- returns false, should return true

1 个答案:

答案 0 :(得分:4)

我担心你可能会卡住。如果您通过ts_debug运行您的术语,您将看到'quick.brown'被解析为主机名,'quick / brown'被解析为文件系统路径。解析器真的不是那么聪明。

我唯一的建议是您预处理文本以将这些标记转换为空格。您可以在plpgsql中轻松创建一个函数来执行此操作。

nicg=# select ts_debug('the quick.brown fox');
                              ts_debug
---------------------------------------------------------------------
 (asciiword,"Word, all ASCII",the,{english_stem},english_stem,{})
 (blank,"Space symbols"," ",{},,)
 (host,Host,quick.brown,{simple},simple,{quick.brown})
 (blank,"Space symbols"," ",{},,)
 (asciiword,"Word, all ASCII",fox,{english_stem},english_stem,{fox})
(5 rows)

从上面你可以看到你没有得到快速和棕色的令牌