Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql PSQLException:错误:tsquery中的语法错误_Postgresql_Search_Full Text Search_Escaping - Fatal编程技术网

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

Postgresql PSQLException:错误:tsquery中的语法错误,postgresql,search,full-text-search,escaping,Postgresql,Search,Full Text Search,Escaping,必须避免使用哪些字符才能确保tsquery中不会出现PSQLException:ERROR:syntax错误? 文档没有说明如何转义搜索字符串:如果您希望术语作为短语/逐字记录,或者它们包含语法中使用的字符,请在术语周围使用引号: select to_tsquery('"hello there" | hi'); 请记住,在你的术语中不应该有疯狂的角色,因为它们不会匹配tsvector中的任何内容 tsquery解析器识别的(非令牌)字符是:\0(null)、(,), (空白)、|、&、:、*和

必须避免使用哪些字符才能确保tsquery中不会出现PSQLException:ERROR:syntax错误?
文档没有说明如何转义搜索字符串:

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

select to_tsquery('"hello there" | hi');
请记住,在你的术语中不应该有疯狂的角色,因为它们不会匹配tsvector中的任何内容

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


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

那么,查询在哪里?有很多查询。事实上,它们是秘密的,我只需要回答我的问题:如何正确地转义查询字符串?请定义“疯狂字符”,然后回答我的问题:-)(我的主要目标是避免因为有人输入了疯狂字符而出现PSQLException)字典中没有出现的任何字符。对于一本英语词典,我会说:
[^A-Za-z0-9]==疯狂
。谢谢。可能有一个要避免的字符列表(如果搜索词在双引号之外)?这样我就只能删除有问题的字符了?对于URL编码,我知道要避免使用哪些字符,它们位于RFC 3986的第12页:我在哪里可以找到tsquery的此类定义?您可能还需要处理反斜杠、逗号和单引号,它们具有特殊的含义。