代码之家  ›  专栏  ›  技术社区  ›  Kev

禁用PostgreSQL 8.4 tsvector解析器的“file”标记类型

  •  6
  • Kev  · 技术社区  · 15 年前

    我有一些文档包含序列,例如 radio/tested 我想在以下查询中返回点击量

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

    不幸的是,默认的解析器需要 无线电/测试 作为一个 file 令牌(尽管在Windows环境中),因此它与上述查询不匹配。当我奔跑 ts_debug 在它上面,当我看到它被识别为一个文件时,lexeme最终 无线电/测试 而不是两个词 radio test .

    有没有什么方法可以配置解析器不查找 文件 令牌?我试过

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

    …但它没有改变 TSU-Debug . 如果有什么方法可以使你丧失能力的话 文件 或者至少让它认识到两者 文件 它认为所有的单词组成了目录名,或者如果有一种方法可以让它把斜杠当作连字符或空格来处理(而不影响 regexp_replace 我自己)那会很有帮助的。

    1 回复  |  直到 15 年前
        1
  •  5
  •   alvherre    15 年前

    我认为做你想做的事情的唯一方法是创建你自己的解析器:(将wparser_def.c复制到一个新文件,从解析表中删除( actionTPS_Base 与文件相关的条目( TPS_InFileFirst , TPS_InFileNext 等等),你应该被安排。我认为主要的困难是使模块符合PostgreSQL的C语言习惯( PG_FUNCTION_INFO_V1 等等。看一看 contrib/test_parser/ 例如。