我有一些文档包含诸如radio/tested之类的序列,我想在查询中返回匹配

select * from doc
where to_tsvector('english',body) @@ to_tsvector('english','radio')

不幸的是,默认解析器将radio/tested作为file token (尽管在Windows环境中),因此它与上述查询不匹配。当我在其上运行ts_debug时,就是当我看到该文件被识别为文件时,该lexeme最终是radio/tested,而不是两个lexemes radiotest

有什么方法可以配置解析器不寻找file token 吗?我试过了
ALTER TEXT SEARCH CONFIGURATION public.english
    DROP MAPPING FOR file;

...但是它并没有改变ts_debug的输出。如果有某种方法可以禁用file,或者至少让它同时识别file和它认为的所有单词组成目录名称,或者是否有一种方法可以将斜杠视为连字符或空格(自己给自己添加regexp_replace带来的性能提升)将非常有帮助。

最佳答案

我认为做您想要做的事情的唯一方法是创建自己的解析器:-(将wparser_def.c复制到一个新文件,从解析表(actionTPS_Base及其后面的表)中删除与文件相关的条目(TPS_InFileFirst,我认为主要的困难是使模块符合PostgreSQL的C语言(TPS_InFileNext等),请看PG_FUNCTION_INFO_V1作为示例。

关于postgresql - 禁用PostgreSQL 8.4 tsvector解析器的 `file` token 类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1980435/

10-11 23:04
查看更多