我使用tsvector和tsquery实现了全文搜索。当数据库中存在逗号时,它不起作用。
我使用下面的查询来搜索结果,它没有获取任何行。
select ndc,ln60
from rndc14_ndc_mstr
where (to_tsvector(ln60) @@ plainto_tsquery('Metformin 1000'));
下面是数据库中存在的与上述字符串匹配的数据。
我使用tsvector和tsquery实现了全文搜索。当数据库中存在逗号时,它不起作用。
我使用下面的查询来搜索结果,它没有获取任何行。
select ndc,ln60
from rndc14_ndc_mstr
where (to_tsvector(ln60) @@ plainto_tsquery('Metformin 1000'));
下面是数据库中存在的与上述字符串匹配的数据。
1条答案
按热度按时间vof42yt11#
要理解为什么你之前的查询没有获取预期的结果,有必要研究PostgreSQL的planto_tsquery()函数的行为。此函数将给定的纯文本标记为以&分隔的单词|、!和<->运算符。标记化过程中将忽略任何逗号和标点符号。
要强制函数将逗号视为搜索查询的一部分,可以使用反斜杠()对其进行转义。然而,要同时搜索“Rate,Fat”和“Rate Fate”,需要使用|操作符合并两个单独的planto_tsquery()函数,每个搜索项一个。
下面是一个示例查询,它使用了两个单独的planto_tsquery()函数|操作员搜索“Rate,Fat”和“Rate Fate”:
PostgreSQL https://www.postgresql.org/docs/14/functions-textsearch.html的完整文档