PSQLException:错误:tsquery 中的语法错误

Posted

技术标签:

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

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

【问题讨论】:

那么,查询器在哪里? 有很多查询。事实上,它们是秘密的,我只需要回答我的问题:如何正确转义查询字符串? 【参考方案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 定义? 您可能还需要处理反斜杠、逗号和单引号,它们具有特殊含义。

以上是关于PSQLException:错误:tsquery 中的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

java - PSQLException:错误:“$ 1”处或附近的语法错误[重复]

PSQLException:错误:关系“表”不存在

PSQLException:错误:关系“TABLE_NAME”不存在

org.postgresql.util.PSQLException:错误:关系不存在 PreparedStatement.executeQuery ()

org.postgresql.util.PSQLException:协议错误。会话设置失败

org.postgresql.util.PSQLException:错误:对于类型字符变化的值太长(255)