【问题标题】:Escaping special characters in to_tsquery在 to_tsquery 中转义特殊字符
【发布时间】:2012-12-15 17:56:36
【问题描述】:

如何对传递给to_tsquery 的字符串中的特殊字符进行分隔?比如这种查询:

select to_tsquery('AT&T');

生产:

NOTICE:  text-search query contains only stop words or doesn't contain lexemes, ignored

 to_tsquery 
------------

(1 row)

编辑:我还注意到to_tsvector 中存在同样的问题。

【问题讨论】:

    标签: postgresql full-text-search


    【解决方案1】:

    一个简单的解决方案是按如下方式创建 tsquery:

    select $$'AT&T'$$::tsquery;
    

    您可以进行更复杂的查询:

    select $$'AT&T' & Phone | '|Bang!'$$::tsquery;
    

    查看文字搜索docs了解更多信息。

    【讨论】:

      【解决方案2】:

      我发现这条评论非常有用,它使用了plainto_tsquery('AT&T) 函数https://stackoverflow.com/a/16020565/350195

      【讨论】:

      • 是否支持部分匹配,例如将 :* 添加到末尾?
      • @ColinD 很抱歉,您找到方法了吗?
      • 我离开了我正在使用的项目,但我不记得实现了解决方案,我的最终查询是这样的 query = "SELECT o.ortholog_id, g.gene_id, g.species_id, g.description, g.symbol FROM search_index s JOIN orthologs o on o.ortholog_id = s.ortholog_id JOIN genes g on o.gene_id = g.gene_id WHERE s.document @@ to_tsquery('english', ?search) ORDER BY ts_rank(s.document, to_tsquery('english', ?search)) DESC, o.ortholog_id LIMIT 300"; 如果我没记错的话,用户可以手动将 * 添加到查询
      【解决方案3】:

      如果您希望将“AT&T”视为搜索词,则需要一些自定义组件,因为默认解析器将其拆分为两个词:

      steve@steve@[local] =# select * from ts_parse('default', 'AT&T');
       tokid | token 
      -------+-------
           1 | AT
          12 | &
           1 | T
      (3 rows)
      steve@steve@[local] =# select * from ts_debug('simple', 'AT&T');
         alias   |   description   | token | dictionaries | dictionary | lexemes 
      -----------+-----------------+-------+--------------+------------+---------
       asciiword | Word, all ASCII | AT    | {simple}     | simple     | {at}
       blank     | Space symbols   | &     | {}           |            | 
       asciiword | Word, all ASCII | T     | {simple}     | simple     | {t}
      (3 rows)
      

      正如您在the documentation for CREATE TEXT PARSER 中看到的那样,这不是很简单,因为解析器似乎需要一个 C 函数。

      您可能会发现有人将“underscore_word”识别为单个标记的帖子很有用:http://postgresql.1045698.n5.nabble.com/Configuring-Text-Search-parser-td2846645.html

      【讨论】:

      • 第二个链接失效
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多