tsquery中的语法错误:带有空格的参数

Luí*_*sta 6 postgresql full-text-search

我有这个全文搜索功能:

CREATE OR REPLACE FUNCTION search_questions(psearch text)
  RETURNS TABLE (questionid INTEGER) AS $func$
BEGIN
  return QUERY
  SELECT DISTINCT (questions.publicationid)
  FROM questions
  WHERE to_tsvector(coalesce(questions.title, '')) @@ to_tsquery(psearch)
        OR
        publicationid IN (
          SELECT DISTINCT(publications.publicationid) FROM publications WHERE to_tsvector(coalesce(publications.body, '')) @@ to_tsquery(psearch)
        )
  ;
END
$func$  LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

但它只适用于单个单词参数.如果我搜索"用户测试",则返回

ERROR: syntax error in tsquery: "user test"

有没有办法搜索带有空格的文本?

亲切的问候

Luí*_*sta 11

我找到了解决方法.在这里

更换: to_tsquery(psearch)

有: plainto_tsquery(psearch)

  • 如果您[很奇怪,为什么](https://www.postgresql.org/docs/current/static/textsearch-controls.html):*`to_tsquery`从querytext创建一个“ tsquery”值,该值必须包含单个标记由tsquery运算符&(AND)分隔,| (要么), !(NOT)和<->(FOLLOWED BY),可能使用括号分组。换句话说,** to_tsquery`的输入必须已经遵循tsquery输入的一般规则*** (2认同)