ruby on rails - postgres search query error if space used -


i'm following along ryan bates' railscast on full text search postgres, however, he's using postgres 9.1 , i'm using 9.2. builds following query execute search. works me if query single word, such "superman" if it's 2 words, such dc comics, or super man, i'm getting error, being new postgres can't figure out how fix. can assist?

pg::error: error:  syntax error in tsquery: "super man" line 1: ...articles"  (to_tsvector('english', name) @@ 'super man...                                                              ^ : select  "articles".* "articles"  (to_tsvector('english', name) @@ 'super man' or to_tsvector('english', content) @@ 'super man') order       ts_rank(to_tsvector(name), plainto_tsquery('super man')) +       ts_rank(to_tsvector(content), plainto_tsquery('super man'))  desc limit 3 offset 0 

query 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 

@@ used compare tsvector tsquery. trying compare tsvector not valid tsquery.

'superman' of type text , should wrapped in call to_tsquery(). looks postgres has tried out , coerced tsquery you, , to_tsquery('superman') valid query.

'super man' of type text , should wrapped in call to_tsquery(). postgres has failed coerce tsquery you, since to_tsquery('super man') not valid query. valid tsquery must have boolean operators & or | tell query how treat words. 'super & man' work.

to save having write queries simple cases of and-style queries, plainto_tsquery makes little easier. in case wrap :q param in call plainto_tsquery

plainto_tsquery(:q) 

Comments

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

c++ - qgraphicsview horizontal scrolling always has a vertical delta -