PQLEXCEPTION:错误:TSQUERY

问题描述 投票:0回答:2

必须避免哪些字符以确保PQLEXCEPTION:错误:TSQUERY中的语法错误不会发生? 该文档没有说任何有关如何逃脱搜索字符串的说法:http://www.postgresql.org/docs/8.3/static/datatype-textsearch.html

postgresql search full-text-search escaping
2个回答
40
投票
用语围绕您的术语引用,如果您希望它们为短语/逐字词,或者包含语法中使用的字符:

select to_tsquery('"hello there" | hi');
谨记,您的意思是您不应该真正拥有疯狂的角色,因为它们不会与Tsvector中的任何内容相匹配。
tsquery Parser认可的(非token)字符为:

\0

(null),

(

)
(whitespace),
|
&
:
 *
!
。但是,您如何将查询的象征化应基于您设置字典的方式。查询中还有很多其他字符可能不需要,不是因为它们会导致语法错误,而是因为这意味着您的查询不正确。
如果是一个简单的查询,请使用
plainto_tsquery

版本,并且您不想手动创建查询。

另一个很好的人要考虑我在文档上看到的是:
https://www.postgresql.org/docs/17/textsearch-controls.html
,它就像

AND

0
投票
websearch_to_tsquery

plainto_tsquery
&

to_tsquery
使用替代语法从queryText创建一个
websearch_to_tsquery

值,其中简单的未形式的文本是有效的查询。与
tsquery

plainto_tsquery
不同,它也认识到某些操作员。此外,此功能将永远不会引起语法错误,这使得使用原始用户提供的输入进行搜索成为可能。支持以下语法:

未点击的文本:不在引用标记中的文本将转换为由
phraseto_tsquery
运算符隔开的术语,好像是由
&

.
    处理的。
  • plainto_tsquery
    :引用标记中的文字将转换为由
    "quoted text"
    运算符分开的项,就好像由
  • <->
  • .
    处理。
    
    phraseto_tsquery
    :“或”一词将转换为
    OR
    运算符。
  • |
    :破折号将转换为
    -
    运算符。
    
  • 不幸的是,就像
  • !
    to_tsquery
    一样,它似乎不支持前缀搜索,这是我想要的自动完整建议。 las.
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.