我有一些文档包含诸如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 radio
和test
。有什么方法可以配置解析器不寻找
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/