Postgresql:如何使全文搜索忽略某些标记?

Hao*_*Hao 5 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
Run Code Online (Sandbox Code Playgroud)

Nic*_*son 6

恐怕你被卡住了。如果您通过 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)
Run Code Online (Sandbox Code Playgroud)

正如你从上面看到的,你不会得到快速和棕色的代币