私は、Postgres を使用した全文検索について Ryan Bates の Railscast に従っていますが、彼は postgres 9.1 を使用しており、私は 9.2 を使用しています。次のクエリを作成して検索を実行します。クエリが「スーパーマン」などの単一の単語である場合は機能しますが、dc comics
、またはなどの 2 つの単語である場合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