无法使用 to_tsvector 和 to_tsquery 获取包含空格的单词

Sli*_*lim 3 postgresql full-text-search

我想获取用户在数据库中输入的单词:

select name 
from users
where to_tsvector(name) @@ to_tsquery('$word:*')
Run Code Online (Sandbox Code Playgroud)

我提到word = alain john smith,当我运行查询时,我收到此错误:

syntax error in tsquery: "alain john smith"
Run Code Online (Sandbox Code Playgroud)

无法识别其输入解析查询plainto_tsquery 中的布尔运算符、权重标签或前缀匹配标签

我该如何解决这个问题?

Lau*_*lbe 6

Atsquery不能包含alain john smith,因为解析器会将其拆分为三个单词。

如果您有 PostgreSQL 9.6 或更高版本,则可以使用

to_tsquery('alain <-> john <-> smith')
Run Code Online (Sandbox Code Playgroud)

它使用“后跟”运算符<->

在旧版本中,您能做的最好的事情是

to_tsquery('alain & john & smith')
Run Code Online (Sandbox Code Playgroud)

它将匹配包含所有三个单词的字符串,但不一定相邻或按此顺序。