Come si cerca una stringa in Ruby on Rails?Come cercare un testo con Active Record in Ruby on Rails 3?
Ad esempio, tutti i record con colonne che contengono "testo".
Il record attivo ha un metodo per esso o devo utilizzare SQL "LIKE" per esso?
Come si cerca una stringa in Ruby on Rails?Come cercare un testo con Active Record in Ruby on Rails 3?
Ad esempio, tutti i record con colonne che contengono "testo".
Il record attivo ha un metodo per esso o devo utilizzare SQL "LIKE" per esso?
Sql like
può essere molto inefficiente in alcuni casi, ad esempio in many cases in MySQL. Raccomando di utilizzare alcuni programmi di indicizzazione full-text come Sphinx, Xapian o Lucene.
Model.find(:all, :conditions => ['name LIKE ?', "%#{tag}%"])
Dove tag è la variabile che contiene la stringa
come da commento @bjg: -
O in Rails 3 si avrebbe scritto questo come
Model.where(["name LIKE :tag", {:tag => tag}])
utilizzando il nuovo sintassi finder -
O in Rails 3 devi scrivere questo come 'Model.where ([ "nome come: tag", {: tag => tag}])' utilizzando la nuova sintassi cercatore – bjg
ma come faccio a dire RoR3 cercare in TUTTE le colonne per quel modello non solo nella colonna "nome"? –
@never_had_a_name controlla il motore di ricerca sphinx per quello. Controlla la sfinge del pensiero http://railscasts.com/episodes/120-thinking-sphinx –
puoi anche utilizzare il metodo 'match' di Arel:
Model.match(:name => tag)
se si desidera eseguire la ricerca in tutte le colonne, è necessario scrivere del codice aggiuntivo.
Penso acts_as_ferret plug sarebbe perfetto per le vostre esigenze, questo plugin permette di configurare facilmente gli indici molto cool come
ActsAsFerret::define_index('my_index',
:models => {
SomeModel => {
:fields => {
:name => { :boost => 4, :store => :yes, :via => :ferret_title },
:foo => { :store => :no, :index => :untokenized },
:baz => { :store => :yes, :via => :ferret_content }
}
}
})
Tutti gli indici acts_as_ferret sono configurati in un unico file, RAILS_ROOT/config/aaf.rb
trovare questo tutorial sembra bello full text search in ruby on rails 3 (ferret)
Github fonte: http://github.com/jkraemer/acts_as_ferret/tree/rails3
Il plugin originale: http://ferret.davebalmain.com/trac/wiki/FerretOnRails
Non solo furetto. Anche la Sfinge-pensiero di Sfinge si integra bene con l'AR. In generale, l'utilizzo del software di indicizzazione full-text è una buona idea. – skalee
Ferret è un tipo di dolore nella parte posteriore. È lento, è incline a indicizzare la corruzione e non ho avuto altro che problemi con esso. pensare-sfinge è la strada da percorrere. –
Se si sta distribuendo a Heroku o non dispiace cadere db agnosticismo, Postgres ha il pieno supporto di ricerca testuale. Non è necessario eseguire un servizio aggiuntivo. Inoltre, PG è il miglior database del SO. http://tenderlove.github.com/texticle/
quindi non c'è modo in Active Record per cercare per una stringa in ogni tabella e le loro colonne? –
La ricerca in tutte le tabelle può essere eseguita con query raw come questa: 'SELECT 'table1' AS nome_tabella, id FROM tabella1 WHERE c1 LIKE"% text% "O c2 LIKE"% text% "UNION ALL SELECT 'table2' AS nome_tabella, id FROM table2 WHERE c3 LIKE "% text%" ', ma non lo farei, è assolutamente imbarazzante. Se si utilizza MySQL, ha alcune funzionalità di indicizzazione full-text - http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html - ma non so quanto sia bello. Non conosco il supporto per la ricerca full-text in altri DB relazionali. Ricapitolando - AR non ti aiuterà, usa il software di indicizzazione full-text se puoi. – skalee
Appena trovato un attimo fa, può aiutarti http://snowgiraffe.com/rdocs/ar-extensions/classes/ActiveRecord/Base.html – skalee