postgresql - 如何在带有数字的字符串上使用 tsvector?

标签 postgresql tsvector

我想在包含所有包含数字的字符串的列上使用 postgres tsquery,如下所示:

FRUIT-239476234

如果我尝试从中制作 tsquery:
select to_tsquery('FRUIT-239476234');

我得到的是:
'fruit' & '-239476234'

我希望能够仅通过此值的数字部分进行搜索,如下所示:
239476234

似乎无法匹配它,因为它将我的连字符解释为“负号”并且不认为 239476234匹配 -239476234 .我如何告诉 postgres 将我的所有字符都视为文本,而不是试图对数字和连字符保持聪明?

最佳答案

来自 future 的答案。一旦发布了 PostgreSQL 13 版,您就可以使用 dict_int module去做这个。

create extension dict_int ;
ALTER TEXT SEARCH DICTIONARY intdict (MAXLEN = 100, ABSVAL=true);
ALTER TEXT SEARCH CONFIGURATION english ALTER MAPPING FOR int WITH intdict;
select to_tsquery('FRUIT-239476234');

      to_tsquery       
-----------------------
 'fruit' & '239476234'

但是您最好创建自己的文本搜索词典以及复制“英文”配置并修改副本,而不是修改默认的。否则,您将面临升级将无声地丢失更改的风险。

如果你不想等待 v13,你可以回补丁 this change并将其编译为您自己的先前服务器的扩展版本。

关于postgresql - 如何在带有数字的字符串上使用 tsvector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60288822/

相关文章:

postgresql - 是否有 ts(文本搜索)函数会返回找到的字符串而不是 bool 值?

postgresql - 如何检索 postgres 中两个 tsvectors 的差异?

postgresql - 使用 terraform 将 AWS RDS PostgreSQL 从 10.18 升级到 13.4

postgresql - 如何在 Sequelize 中编写嵌套子查询

sql - 如何在postgres中设置查询时间

mysql - 从所有数据库的查询结果中获取顶部记录

postgresql - Postgres 全文搜索 (tsvector/tsquery) 的行为不符合预期

postgresql - 对 tsvector 中的每个元素使用 Levenshtein 函数?

postgresql - 包含 tsvector 字段的可能原因?

sql - 无法让 DISTINCT + GROUP 与具有两个值的 Postgres 一起使用