Sto seguendo insieme a Railscast di Ryan Bates nella ricerca a testo integrale con Postgres, tuttavia, sta usando Postgres 9.1 e sto usando 9.2. Costruisce la seguente query per eseguire una ricerca. Funziona per me se la mia query è una singola parola, ad esempio "superman", ma se si tratta di due parole, ad esempio dc comics
o super man
, ricevo questo errore, che è appena nuovo per Postgres Non riesco a capire come aggiustare. Potete assistere?errore di ricerca postgres query se lo spazio utilizzato
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
query da 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
Grazie per il vostro aiuto. Ho avvolto il ': q' due volte come vedete qui, tuttavia, anche se non si interrompe ora in una ricerca di due parole come' è stato' non restituisce alcun risultato anche se 'è stato' esiste nel contenuto del mio db. è questo che ti aspetti? comunque per far sì che recuperi i risultati su una query di ricerca multi-parola? 'where (" to_tsvector ('english', name) @@ plainto_tsquery (: q) o to_tsvector ('inglese', contenuto) @@ plainto_tsquery (: q) ", q: query) .order (" # {rank} desc ")' – BrainLikeADullPencil
Leggi su [stop parole] (http://www.postgresql.org/docs/9.2/static/textsearch-dictionaries.html). È probabile che "ha" e "stato" siano considerati troppo comuni nel dizionario inglese per preoccuparsi di indicizzarli. –
ok, capisco. Sta restituendo risultati per parole meno comuni. Grazie. – BrainLikeADullPencil