di: Gianluigi Spagnuolo 07 Ottobre 2008
Ferret, ovvero Apache Lucene per Ruby, è una libreria che fornisce funzionalità di indicizzazione e di ricerca. Per motivi di prestazioni è interamente scritto in C e può essere installato sia da rubygems sia a partire dai sorgenti.
In questo articolo introduciamo alcune funzionalità di base, che ci permettono di indicizzare ed effettuare ricerche su semplici stringhe di testo.
Iniziamo con un esempio banale che vede l'indicizzazione di stringhe utilizzando la classe Ferret::Index::Index. Il primo passo da fare è creare un'istanza della classe Index; è possibile crearlo in memoria scrivendo semplicemente:
require 'rubygems' require 'ferret' index = Ferret::Index::Index.new
oppure passando dei parametri che definiscono le caratteristiche dell'indice. Parametri che vedremo in dettaglio nei prossimi esempi. A questo punto si può popolare l'indice appena creato inserendo i documenti sotto forma di stringhe. Ad esempio ipotizzando di dover indicizzare i testi di una libreria possiamo scrivere:
index << "I dolori del giovane Werther " index << "Il giovane Holden" index << "Lettere a un giovane poeta" index << "Diario di un dolore"
Un indice può essere visto come un array di documenti, dove per documento si intende un blocco di dati rappresentato da diversi campi che lo identificano e lo definiscono. L'indicizzazione e la ricerca non si limita solo ai file di testo ma si estende anche ad altri tipi di file come ad esempio i file PDF, MS Word, MP3, ecc.
Un documento in Ferret è un oggetto di tipo Ferret::Document che non è altro che un Hash leggermente modificato, e può essere visto come un insieme di campi dotati di un nome e di un array di valori di testo. La differenza con i normali Hash sta nell'aggiunta dell'attributo boost che viene utilizzato per dare un diverso peso ai documenti nei risultati delle ricerche. Un esempio di documento con più campi è il seguente:
index << {:title => "Il giovane Holden", :author => "J.D.Salinger"}
I documenti estratti dall'indice sono invece oggetti di tipo Ferret::Index::LazyDoc. Per visualizzare i campi di un documento va utilizzato il metodo LazyDoc#fields.
Ogni mercoledì, direttamente nella tua e-mail: articoli, guide e tutorial su Ruby e Ruby on Rails .
Iscriviti alla newsletter
|
Nessun corso previsto |
|
|
Corso Amministratore Linux15 Febbraio 2010 a Roma |