di: Carlo Pecchia 18 Novembre 2008
In una moderna applicazione Web è essenziale offrire funzionalità di ricerca evolute tra i contenuti. Un primo approccio consiste nell'utilizzare, ad esempio, le facility di ricerca messe a disposizione dal sottostante RDBMS con query del tipo:
select * from posts where body like '%foo%'
Ma questo approccio ha delle evidenti limitazioni: cosa succede se il nostro modello ha diversi campi sui quali effettuare la ricerca? E se la ricerca andasse effettuata non solo su un unico modello, ma anche su alcuni (se non tutti) i modelli ad esso direttamente collegati?
Supponiamo di avere un social network di ricette culinarie. Vogliamo offrire un comodo ed intuitivo form per la ricerca delle ricette. Ogni ricetta è rappresentata dal proprio nome, dalla descrizione, dal tempo di preparazione e da un insieme di ingredienti. Se ipotizziamo anche l'immancabile presenza dei tag diventa complicato costruire una query di ricerca su quanto appena elencato, per non parlare dell'impossibilità di prevedere query complesse!
class Recipe < ActiveRecord::Base
has_and_belongs_to_many :tags
has_and_belongs_to_many :ingredients
validates_presence_of :name
validates_presence_of :description
validates_presence_of :preparation_time
end
class Ingredient < ActiveRecord::Base
has_and_belongs_to_many :recipes
validates_presence_of :name
end
class Tag < ActiveRecord::Base
has_and_belongs_to_many :recipes
validates_presence_of :name
end
Un'idea potrebbe consistere nel tenere, in un campo apposito, tutte le informazioni testuali legate ad una ricetta, ed aggiornarlo ogni volta che una di queste viene aggiornata… ma anche quando vengono aggiornati gli ingredienti ed i tag … impraticabile!
Solr è un motore di ricerca basato sulla libreria Lucene (già in seno ad Apache Software Foundation) e viene eseguito all'interno di un servlet container. Ma niente paura… esiste un plugin per Rails che permette di installarlo all'interno dell'applicazione corrente e di accedere alle sue (potenti) funzionalità con estrema facilità ed in brevissimo tempo.
Posto di avere un JRE 1.5 nel nostro ambiente, all'interno della nostra applicazione Rails eseguiamo il comando:
$ script/plugin install svn://svn.railsfreaks.com/projects/acts_as_solr/trunk
Tutto qui. A questo punto abbiamo un search engine integrato nella nostra applicazione Rails, occorre solo lanciarlo con il comando:
$ rake solr:start
Partirà il demone Solr in ascolto sulla porta 8982 (o 8983 in production) già configurato per accedere al nostro data base ed indicizzarlo. Ovviamente dobbiamo ancora stabilire cosa deve essere indicizzato.
Figura 1. Pannello di amministrazione di Solr
(http://localhost:8982/solr)
Guida ActiveSupportUna panoramica sulle funzionalità più importanti di ActiveSupport:... |
Guida Ruby On Rails 2Scoprire le novità di Ruby on Rails 2, memorizzare i dati con... |
Guida Ruby e il WebUn percorso alla scoperta delle potenzialità offerte da Ruby nella... |
Ogni mercoledì, direttamente nella tua e-mail: articoli, guide e tutorial su Ruby e Ruby on Rails .
Iscriviti alla newsletter