禁用PostgreSQL 8.4 tsvector解析器的`file`令牌类型

时间:2009-12-30 14:21:28

标签: postgresql parsing tsvector

我有一些包含radio/tested等序列的文档,我希望在

等查询中返回匹配
select * from doc
where to_tsvector('english',body) @@ to_tsvector('english','radio')

不幸的是,默认解析器将radio/tested作为file令牌(尽管在Windows环境中),因此它与上述查询不匹配。当我在其上运行ts_debug时,就会发现它被识别为文件,并且词汇最终为radio/tested而不是两个词句radiotest

有没有办法配置解析器不要查找file令牌?我试过了

ALTER TEXT SEARCH CONFIGURATION public.english
    DROP MAPPING FOR file;

...但它没有改变ts_debug的输出。如果有某种方法可以禁用file,或者至少让它同时识别file和它认为构成目录名称的所有单词,或者是否有办法让它得到治疗斜线作为连字符或空格(没有regexp_replace自己的性能影响),这将非常有帮助。

1 个答案:

答案 0 :(得分:5)

我认为做你想做的事的唯一方法是创建你自己的解析器:-(将wparser_def.c复制到一个新文件,从解析表(actionTPS_Base及其后面的那些表中删除)条目与文件(TPS_InFileFirstTPS_InFileNext等)有关,你应该设置。我认为主要的困难是使模块符合PostgreSQL的C语言(PG_FUNCTION_INFO_V1等)。请查看contrib/test_parser/示例。