当数据库中存在逗号(,)时,在PostgreSQL中无法进行全文搜索

yptwkmov  于 2023-06-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(169)

我使用tsvector和tsquery实现了全文搜索。当数据库中存在逗号时,它不起作用。
我使用下面的查询来搜索结果,它没有获取任何行。

select ndc,ln60 
from rndc14_ndc_mstr  
where (to_tsvector(ln60) @@ plainto_tsquery('Metformin 1000'));

下面是数据库中存在的与上述字符串匹配的数据。

vof42yt1

vof42yt11#

要理解为什么你之前的查询没有获取预期的结果,有必要研究PostgreSQL的planto_tsquery()函数的行为。此函数将给定的纯文本标记为以&分隔的单词|、!和<->运算符。标记化过程中将忽略任何逗号和标点符号。
要强制函数将逗号视为搜索查询的一部分,可以使用反斜杠()对其进行转义。然而,要同时搜索“Rate,Fat”和“Rate Fate”,需要使用|操作符合并两个单独的planto_tsquery()函数,每个搜索项一个。
下面是一个示例查询,它使用了两个单独的planto_tsquery()函数|操作员搜索“Rate,Fat”和“Rate Fate”:

SELECT * FROM mytable WHERE search_vector @@ plainto_tsquery('english', 'Rate\,Fat') | plainto_tsquery('english',' Rate <-> Fate');

PostgreSQL https://www.postgresql.org/docs/14/functions-textsearch.html的完整文档

相关问题