是否有魔法函数或运算符可以忽略某些标记?
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
最佳答案
恐怕你可能被卡住了。如果您通过 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)
正如您从上面看到的,您不会获得 quick 和 brown 的代币
关于Postgresql:如何使全文搜索忽略某些标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/896752/