Lucene è una libreria di programmi pubblicata da Apache Software Foundation. È open source e gratuita e può essere utilizzata e modificata dagli utenti. All’inizio Lucene era scritto interamente in Java, ma ora ci sono anche porte in altri linguaggi di programmazione. Apache Solr ed Elasticsearch sono potenti estensioni che ampliano la funzione di ricerca con ancora più possibilità.
Lucene è una ricerca full-text: ciò significa in parole povere che un programma ricerca una serie di documenti testuali per uno o più termini definiti dall’utente. È perciò subito evidente che Lucene non è utilizzato esclusivamente nel contesto del World Wide Web, anche se le funzioni di ricerca sono qui onnipresenti. Lucene può infatti essere utilizzato anche per archivi, librerie o anche per PC desktop domestici. Lucene cerca non solo documenti HTML, ma funziona per esempio anche con e-mail o file PDF.
Decisivo per la ricerca è un indice, cuore del software Apache: qui sono salvati tutti i termini di tutti i documenti. Chiamato Inverted Index, fondamentalmente è soltanto una tabella in cui per ogni termine viene memorizzata la posizione corrispondente. Per costruire un simile indice occorre innanzitutto un’estrazione: ciò significa che tutti i termini devono essere estratti da tutti i termini e salvati nell’indice. Lucene offre agli utenti la possibilità di configurare questa estrazione individualmente. Gli sviluppatori decidono quali campi vogliono includere nell’indice. Ma per capire meglio occorre fare un passo indietro.
Gli oggetti con cui lavora Lucene sono documenti in qualsiasi forma. Tuttavia i documenti stessi contengono, dal punto di vista di Lucene, dei campi. Essi sono ad esempio il nome dell’autore, il titolo del documento o il nome del file stesso. Ogni campo ha come nome univoco un valore. Ad esempio, il campo title potrebbe avere il valore “Istruzioni per l’uso di Apache Lucene”. Quando si crea l’indice è quindi possibile decidere quali metadati si desidera registrare.
Quando si indicizzano i documenti avviene anche una cosiddetta tokenizzazione. Dal punto di vista di una macchina un documento è inizialmente una raccolta di informazioni. Anche se vi allontanate dal livello dei bit e vi rivolgete al contenuto leggibile dagli esseri umani, un documento consiste in una stringa di caratteri: lettere, punteggiatura, spazi.
Da questo set di dati è possibile utilizzare la tokenizzazione per creare segmenti, i termini (principalmente parole singole) che è possibile cercare. Il modo più semplice per eseguire tale tokenizzazione funziona con il metodo “white space”: un termine finisce quando c’è uno spazio bianco. Tuttavia tale metodo non porta allo scopo desiderato se i termini fissi consistono di diverse parole, per esempio “Notte santa”. Per questo vengono utilizzati dizionari che possono anche essere implementati nel codice Lucene.
Quando analizza i dati di cui la tokenizzazione è una parte, Lucene esegue anche una normalizzazione. Ciò significa che i termini sono portati in una forma standardizzata, nella quale ad esempio tutte le lettere maiuscole vengono scritte comunque in minuscolo. Inoltre Lucene crea uno smistamento che funziona tramite algoritmi, ad esempio utilizzando il metodo TF-IDF. In qualità di utente, probabilmente desiderate ottenere per primi i risultati più rilevanti o più recenti, come rendono possibile gli algoritmi del motore di ricerca.
Per fare in modo che gli utenti possano trovare qualcosa devono inserire un termine di ricerca in una riga di testo. Nel contesto di Lucene il termine o i termini sono chiamati “query”, che in inglese significa “richiesta”. Essa indica che l’input non deve consistere solo di una o più parole, ma può anche contenere modificatori come AND, OR, + e -, nonché metacaratteri. QueryParser, una classe all’interno della libreria del programma, traduce l’input in una richiesta di ricerca specifica per il motore di ricerca. Inoltre gli sviluppatori di QueryParser hanno la possibilità di modificare le opzioni di configurazione, così il parser può essere configurato per soddisfare le esigenze dell’utente.
Ciò che ha reso Lucene completamente nuova alla sua comparsa è stata l’indicizzazione incrementale: prima di Lucene era possibile soltanto un batch indexing con il quale si implementavano solo indici completi, mentre con l’indicizzazione incrementale ora si può aggiornare l’indice. Le singole voci possono essere aggiunte o rimosse.