我正在跟随 Ryan Bates 的 Railscast 使用 Postgres 进行全文搜索,但是,他使用的是 postgres 9.1,而我使用的是 9.2。他构建以下查询来执行搜索。如果我的查询是一个词,例如“超人”,它适用于我,但如果它是两个词,例如dc comics
,或super man
,我会收到此错误,这对 postgres 来说是新的,我不知道如何修复. 你能帮忙吗?
PG::Error: ERROR: syntax error in tsquery: "super man"
LINE 1: ...articles" WHERE (to_tsvector('english', name) @@ 'super man...
^
: SELECT "articles".* FROM "articles" WHERE (to_tsvector('english', name) @@ 'super man' or to_tsvector('english', content) @@ 'super man') ORDER BY ts_rank(to_tsvector(name), plainto_tsquery('super man')) +
ts_rank(to_tsvector(content), plainto_tsquery('super man'))
desc LIMIT 3 OFFSET 0
来自 Article.rb 的查询
def self.text_search(query)
if query.present?
rank = <<-RANK
ts_rank(to_tsvector(name), plainto_tsquery(#{sanitize(query)})) +
ts_rank(to_tsvector(content), plainto_tsquery(#{sanitize(query)}))
RANK
where("to_tsvector('english', name) @@ :q or to_tsvector('english', content) @@ :q", q: query).order("#{rank} desc")
else
scoped
end
end