【问题标题】:PSQLException: ERROR: syntax error in tsqueryPSQLException:错误:tsquery 中的语法错误
【发布时间】:2013-04-07 20:40:44
【问题描述】:

必须避免哪些字符以确保不会发生 PSQLException: ERROR: syntax error in tsquery? 文档没有说明如何转义搜索字符串:http://www.postgresql.org/docs/8.3/static/datatype-textsearch.html

【问题讨论】:

  • 那么,查询器在哪里?
  • 有很多查询。事实上,它们是秘密的,我只需要回答我的问题:如何正确转义查询字符串?

标签: postgresql search full-text-search escaping


【解决方案1】:

如果您希望它们作为短语/逐字使用或者它们包含语法中使用的字符,请在您的术语周围使用引号:

select to_tsquery('"hello there" | hi');

请记住,您的术语中不应该有疯狂的字符,因为它们不会匹配 tsvector 中的任何内容。

tsquery 解析器识别的(非令牌)字符有:\0(空)、()(空白)、|&:*!。但是你如何标记你的查询应该基于你如何设置你的字典。您可能不希望在查询中出现许多其他字符,不是因为它们会导致语法错误,而是因为这意味着您没有正确标记查询。

如果是简单的AND 查询并且您不想手动创建查询,请使用plainto_tsquery 版本。

【讨论】:

  • 请定义“疯狂的字符”,然后我的问题得到回答:-)
  • (我的主要目标是避免仅仅因为有人输入了疯狂的字符而发生任何 PSQLException)
  • 字典中没有出现的任何字符。对于英语词典,我会说:[^A-Za-z0-9] == crazy.
  • 谢谢。也许有一个要避免的字符列表(如果搜索词在双引号之外)?这样我只能删除有问题的字符?对于 URL 编码,我确切地知道要避免哪些字符,它们位于 RFC 3986 的第 12 页:tools.ietf.org/html/rfc3986#page-12 在哪里可以找到这样的 tsquery 定义?
  • 您可能还需要处理反斜杠、逗号和单引号,它们具有特殊含义。
猜你喜欢
  • 1970-01-01
  • 2017-03-16
  • 2011-09-03
  • 2020-01-03
  • 1970-01-01
  • 1970-01-01
  • 2016-12-26
  • 2018-09-22
  • 1970-01-01
相关资源
最近更新 更多