6

我有一些包含序列的文档,例如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_replaceing 他们自己)这将非常有帮助。

4

1 回答 1

5

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

于 2010-01-04T05:12:03.783 回答