Creare un motore di ricerca full-text con Lucene

di: Paolo Maresca     20 Luglio 2009

Il reperimento veloce ed efficace delle informazioni è molto importante, sia sul Web, sia nei tanti ambiti in cui la mole di dati digitali è molto grande. Per questo occorre introdurre sistemi che indicizzino i dati, semplificando e ottimizzando le ricerche. In un articolo precedente abbiamo introdotto Lucene, la libreria di Apache che fornisce degli strumenti preconfezionati per implementare proprio l'indicizzazione e la ricerca.

In questo articolo esamineremo prima un'architettura generica per motori di ricerca full-text, poi un'implementazione di questa architettura che sfrutta la Lucene.

Architettura di un generico motore di ricerca full-text

Un motore di ricerca full-text è composto, in genere, di due parti principali: un front-end, che serve da interfaccia utente, e un back-end che, invece, implementa le funzioni avanzate di ricerca delle informazioni, sia dai documenti (file di testo o documenti web), sia dai database. Il back-end si occupa anche di realizzare degli indici ottimizzati, che sono fondamentali in fase di ricerca.

Figura 1. Architettura di un generico motore di ricerca full-text

Architettura di un generico motore di ricerca full-text

Le parti di front-end e di back-end del sistema si compongono di diverse entità, ognuna delle quali ricopre un ruolo specifico e compie una parte di elaborazione specifica del processo di ricerca.

La parte di front-end contiene:

  • un'interfaccia utente, alla quale l'utente richiederà il servizio di ricerca e dalla quale riceverà i risultati
  • un query parser, al quale è fornita la keyword di ricerca introdotta dall'utente (può essere una stringa di testo molto generica) che deve essere trasformata in un'opportuna query di ricerca, ovvero in una query adatta al formato degli indici a disposizione ed alla tecnologia/tecnica di interrogazione di questi ultimi
  • un searcher, che è un'entità particolarmente importante, dal momento che cura la parte vera e propria di ricerca sugli indici a partire dalla query (opportunamente resa) in ingresso.

La parte di back-end, invece, è composta da:

  • uno spider, detto anche crawler, il quale ha il compito di aprire in maniera metodica i documenti che incontra durante l'avanscoperta (su di un file-system, piuttosto che su di una rete o su di un database) e di analizzarne il contenuto al fine di trovare e riportare i token ritenuti più importanti/discriminanti rispetto al contesto
  • un indicizzatore che ha, invece, il compito di acquisire i token fornitigli ed inserirli in un indice ottimizzato di ricerca insieme a delle altre particolari informazioni discriminanti rispetto al documento che contiene il token in questione.

Appartengono alla parte di back-end del sistema, ovviamente, anche gli indici generati dall'indicizzatore, i database ed infine i file che contengono generici documenti di testo oppure pagine Web salvate da Internet (una delle modalità operative degli spider è proprio quella di esplorare la rete globale, salvare i documenti ipertestuali ed analizzarli).

Una volta esaminata l'architettura generale di un motore di ricerca full-text, sarà più semplice comprendere i passaggi necessari all'implemtrattazione del progetto.

Guide Java

Guida Apache Struts

Il primo e più utilizzato tra i framework MVC del mondo Java,...

Guida Java Spring

Scoprire il lightweight container più famoso del mondo Java....

Guida Java 6

Prendendo le mosse dalla guida Java, già presente su HTML.it,...

Altre guide

Newsletter @Programmazione

Ogni mese, direttamente nella tua e-mail: articoli, script e guide su Java, Visual Basic, VB.Net ed i più diffusi linguaggi di programmazione.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti