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:错误:关系“TABLE_NAME”不存在
org.postgresql.util.PSQLException:错误:关系不存在 PreparedStatement.executeQuery ()