Solr (pro­nun­cia­to Solar) è un sot­to­pro­get­to open source basato sul software libero Lucene di Apache. Solr si basa su Lucene Core ed è scritto in Java. Come server di ricerca, Apache Solr è uno dei più popolari strumenti di in­te­gra­zio­ne dei motori di ricerca verticali. I vantaggi di Solr includono l’ampia gamma di funzioni (che include anche, ad esempio, la sfac­cet­ta­tu­ra dei risultati di ricerca) e l’in­di­ciz­za­zio­ne ac­ce­le­ra­ta. Funziona anche su con­te­ni­to­ri server come Apache Tomcat.

In primo luogo spie­ghe­re­mo come funziona Apache Solr e poi, con il tutorial di Solr, a cosa fare at­ten­zio­ne quando si utilizza il software per la prima volta.

L’emergere di Apache Solr

Il server di ricerca Solr è stato costruito sulla base di Lucene. Apache Lucene Core è stato svi­lup­pa­to dal software designer Doug Cutting nel 1997. Ini­zial­men­te veniva offerto tramite il servizio di fi­le­ho­sting Sour­ce­For­ge.

Nel 1999 la Apache Software Foun­da­tion ha lanciato il Jakarta Project per sup­por­ta­re e guidare lo sviluppo di un software Java gratuito. Nel 2001 anche Lucene è diventato parte di questo progetto ed è stato scritto anch’esso in Java. Dal 2005 ap­par­tie­ne ai progetti prin­ci­pa­li di Apache e funziona con una licenza Apache gratuita. A partire da Lucene sono emersi alcuni sot­to­pro­get­ti come Lucy (Lucene, ma scritto in C) e Lucene.NET (Lucene in C #). Anche il popolare server di ricerca Ela­stic­search è basato, come Solr, su Lucene.

Sulla base di Lucene 2004 è emerso anche Solr: a quel tempo, tuttavia, il servlet era ancora chiamato Solar e di­stri­bui­to da CNET Networks. “Solar” stava per “Search on Lucene and Resin”. Nel 2006 CNET ha ceduto il progetto alla Apache Foun­da­tion, dove ha at­tra­ver­sa­to un altro periodo di sviluppo. Quando Solr fu aperto al pubblico nel 2007 come progetto separato attirò ra­pi­da­men­te su di sé l’at­ten­zio­ne della community. Nel 2010 la community Apache ha integrato il servlet nel progetto Lucene. Questo sviluppo congiunto ga­ran­ti­sce una buona com­pa­ti­bi­li­tà. Il pacchetto è com­ple­ta­to da Solr Cloud e Solr Parser Tika.

De­fi­ni­zio­ne
Apache Solr è un server di ricerca per progetti web basati su Java in­di­pen­den­te­men­te dalla piat­ta­for­ma. Il progetto open source si basa sulla libreria Java Lucene e integra au­to­ma­ti­ca­men­te i documenti in tempo reale e forma cluster dinamici. Solr è com­pa­ti­bi­le con PHP, Python, XML e JSON. Il servlet ha un’in­ter­fac­cia utente web e i comandi vengono scambiati in http. Solr consente agli utenti di seguire una so­fi­sti­ca­ta ricerca full-text in documenti RTF (Rich Text Format). È par­ti­co­lar­men­te adatto per i motori di ricerca verticali su siti web statici. L’esten­sio­ne SolrCloud consente core ag­giun­ti­vi e clas­si­fi­ca­zio­ne estesa dei frammenti.

In­tro­du­zio­ne a Solr: spie­ga­zio­ne dei concetti di base

Apache Solr è integrato come servlet in Lucene. Spie­ghia­mo bre­ve­men­te come funziona in qualità di com­ple­men­to della libreria del software Lucene. Oltre a questo utilizzo, molti siti web si servono di Solr come base per il loro motore di ricerca verticale (Netflix e Ebay sono esempi noti).

Che cos’è Apache Lucene?

Il software gratuito Lucene è una libreria Java open source gratuita uti­liz­za­bi­le in­di­pen­den­te­men­te dalla piat­ta­for­ma. Lucene è nota come libreria NoSQL scalabile e potente. Il software di ar­chi­via­zio­ne è par­ti­co­lar­men­te adatto per i motori di ricerca di Internet, sia per la ricerca nel World Wide Web sia per quella a livello di dominio e di richieste locali.

Fatto

Lucene Core è una libreria software (o anche sem­pli­ce­men­te “libreria” o libreria di com­po­nen­ti) per il lin­guag­gio di pro­gram­ma­zio­ne Java. Le bi­blio­te­che sono sem­pli­ce­men­te una raccolta ordinata di sot­to­pro­gram­mi. Gli svi­lup­pa­to­ri uti­liz­za­no queste raccolte per collegare i programmi ai moduli ausiliari tramite un’in­ter­fac­cia. Mentre un programma è in ese­cu­zio­ne, può accedere al com­po­nen­te richiesto nella libreria.

Poiché la libreria divide i documenti in campi di testo e li clas­si­fi­ca in modo logico, la ricerca full-text tramite Lucene funziona molto pre­ci­sa­men­te. Lucene è in grado di trovare anche cor­ri­spon­den­ze rilevanti per testi/documenti simili. Per questo motivo la libreria è adatta anche per pagine di re­cen­sio­ni come Yelp. Finché riconosce il testo, il formato (testo normale, PDF, HTML o altro) non ha im­por­tan­za. Perché invece di in­di­ciz­za­re i file, Lucene lavora con testo e metadati. Tuttavia i file devono essere letti dalla libreria.

A tale scopo il team di Lucene ha svi­lup­pa­to il progetto Apache Tika, uno strumento utile per l’analisi del testo, la tra­du­zio­ne e l’in­di­ciz­za­zio­ne. Tika legge testo e metadati da oltre mille tipi di file, quindi estrae il testo e lo prepara a ulteriori modifiche. Lo strumento consiste di un parser e un ri­le­va­to­re: il parser analizza i testi e struttura il contenuto in una gerarchia ordinata, mentre il ri­le­va­to­re digita il contenuto. Ad esempio, riconosce il tipo di file e il tipo di contenuto dai metadati.

Ca­rat­te­ri­sti­che e funzioni più im­por­tan­ti di Lucene:

  • In­di­ciz­za­zio­ne rapida, sia in fasi che in lotti (secondo i dati forniti da Lucene stesso fino a 150 GB all’ora)
  • Uso economico della RAM
  • Scritto in Java, quindi mul­ti­piat­ta­for­ma (le varianti nei linguaggi di pro­gram­ma­zio­ne al­ter­na­ti­vi sono Apache Lucy e Lucene.NET)
  • In­ter­fac­cia per plug-in
  • Ricerca di campi di testo (categorie come contenuto, titolo, autore, parola chiave), anche di diversi con­tem­po­ra­nea­men­te
  • Ordine per campi di testo
  • Elenco per so­mi­glian­za/rilevanza dei risultati di ricerca

Lucene suddivide i documenti in campi di testo come titolo (“title”), autore (“author”) e corpo del testo (“text”). All’interno di questi campi il software fa una ricerca con il query parser (ana­liz­za­to­re di richieste), con­si­de­ra­to par­ti­co­lar­men­te ef­fi­cien­te per le ricerche con in­se­ri­men­to manuale del testo. La sintassi semplice consiste in un termine di ricerca e un modifier. I termini di ricerca possono essere singole parole o gruppi di parole. È possibile mo­di­fi­car­li con un modifier o combinare più termini con variabili booleane per formare una query complessa. Nel tutorial di Apache per la sintassi dei query parser trovate i comandi precisi.

Lucene supporta anche ricerche fuzzy basate sulla distanza di Le­ven­sh­tein. Quest’ultima rileva il numero di modifiche ai caratteri (cioè so­sti­tui­sci, inserisci o cancella) per passare da una stringa si­gni­fi­ca­ti­va a un’altra. Ad esempio “mare” (so­sti­tui­re “r” con “l”) ha una distanza di 1 da “male”, poiché è stata ne­ces­sa­ria una sola ope­ra­zio­ne di con­ver­sio­ne.

Potete impostare voi stessi un valore che determini l’ampiezza delle de­via­zio­ni dal termine di ricerca originale per far sì che il ri­spet­ti­vo termine sia ancora con­si­de­ra­to nei risultati di ricerca. Questo valore è compreso tra 0 e 1: più è vicino a 1, più il risultato della ricerca deve as­so­mi­glia­re alla parola sorgente. Se non inserite alcun valore, esso verrà au­to­ma­ti­ca­men­te impostato su 0,5. Il comando cor­ri­spon­den­te è questo:

mare~

Se volete stabilire voi un valore preciso (0,9 nell‘esempio), in­se­ri­te­lo come segue nel comando:

mare~0.9

Allo stesso modo, lo strumento di ricerca am­bien­ta­le vi consente di cercare parole e imposta anche la distanza tra i termini di ricerca nel testo. Ad esempio se state cercando la frase “Alice nelle città” potete impostare le parole “Alice” e “città” in un raggio di tre parole:

"alice città"~3

Che cos’è un motore di ricerca verticale?

Lucene abilita le ricerche sul World Wide Web e all’interno dei domini. I motori di ricerca che coprono una vasta gamma di pagine sono chiamati motori di ricerca oriz­zon­ta­li. Essi includono i ben noti provider Google, Bing, Yahoo, ma anche Duc­k­Duck­Go e Startpage. Un motore di ricerca verticale, d’altra parte, è limitato a un dominio, un argomento specifico o un pubblico di de­sti­na­zio­ne. Un motore di ricerca specifico del dominio aiuta i vi­si­ta­to­ri del vostro sito web a trovare su di esso testi o offerte spe­ci­fi­che. Esempi di motori di ricerca tematici sono portali di consigli come Tri­pAd­vi­sor o Yelp, ma anche motori di ricerca per il lavoro. I motori di ricerca per specifici target si rivolgono, ad esempio, a bambini e ado­le­scen­ti, o anche a scien­zia­ti che ricercano le fonti.

I crawler fo­ca­liz­za­ti (al posto dei web crawler) aiutano i motori di ricerca verticali a trovare risultati più accurati. Una bi­blio­te­ca come Lucene, che divide il proprio indice in classi per principi di tas­so­no­mia e le collega in modo logico per ontologia, rende possibile questa esatta ricerca a tutto il testo. I motori di ricerca verticali uti­liz­za­no anche filtri con cor­ri­spon­den­za tematica che limitano il numero dei risultati.

Fatto
Ontologia e tas­so­no­mia sono concetti che nell’ambito dell’in­for­ma­ti­ca sono im­por­tan­ti per l’ar­chi­via­zio­ne mirata. La tas­so­no­mia si occupa della divisione dei termini in classi. Questo li divide in una gerarchia simile a un diagramma ad albero. Con ontologia, in in­for­ma­ti­ca si descrive il modo in cui si re­la­zio­na­no lo­gi­ca­men­te i concetti. I gruppi con­cet­tua­li si riu­ni­sco­no in gruppi che segnalano una stretta relazione. Inoltre, i relativi gruppi con­cet­tua­li sono collegati tra loro, creando una rete di relazioni.

L’indice di Lucene è un archivio pratico e scalabile per ricerche veloci, tuttavia ci sono alcuni passaggi es­sen­zia­li che dovete ripetere fre­quen­te­men­te ma che non avvengono au­to­ma­ti­ca­men­te. Infine, per una ricerca verticale è ne­ces­sa­rio un indice am­pia­men­te ra­mi­fi­ca­to. È qui che entra in gioco Apache Solr. Il server di ricerca integra le funzioni della libreria. E Solr può essere impostato ra­pi­da­men­te e fa­cil­men­te con i comandi giusti, anche se siete neofiti nel mondo di Java. Il servlet offre molti strumenti pratici che vi con­sen­to­no di con­fi­gu­ra­re ra­pi­da­men­te un motore di ricerca verticale per il vostro sito web e adattarlo alle esigenze dei vostri vi­si­ta­to­ri.

Che cos’è Solr? Fun­zio­na­men­to del server di ricerca

Ora che disponete di in­for­ma­zio­ni di base sulla fon­da­zio­ne Lucene e lo scopo di Solr, spie­ghia­mo come funziona il motore di ricerca, in che modo espande Lucene e come lavora con esso.

Solr: elementi di base

Solr è scritto in Java, così potete uti­liz­za­re il servlet in­di­pen­den­te­men­te dalla piat­ta­for­ma. I comandi sono ge­ne­ral­men­te scritti in HTTP (Hypertext Transfer Protocol), mentre si utilizza XML (Ex­ten­si­ble Markup Language) per i file da me­mo­riz­za­re. At­tra­ver­so un’API Apache Solr fornisce anche a svi­lup­pa­to­ri Python e Ruby il loro lin­guag­gio di pro­gram­ma­zio­ne familiare. Per coloro che uti­liz­za­no nor­mal­men­te la Ja­va­Script Object Notation (ab­bre­via­to in JSON), Ela­stic­Search fornisce l’ambiente ottimale. Solr può anche lavorare con questo formato tramite un’API.

Sebbene il server di ricerca sia basato su Lucene e si integri per­fet­ta­men­te nella sua ar­chi­tet­tu­ra, Solr funziona anche da solo. È com­pa­ti­bi­le con server container come Apache Tomcat.

In­di­ciz­za­zio­ne per risultati di ricerca accurati – in frazioni di secondo

Strut­tu­ral­men­te il servlet si basa su un file invertito (in inglese: inverted index). A tal fine Solr utilizza la bi­blio­te­ca di Lucene. I file invertiti sono sot­to­spe­cie dell’indice del database e do­vreb­be­ro ac­ce­le­ra­re la richiesta di in­for­ma­zio­ni. All’interno della libreria l’indice memorizza il contenuto che può con­si­ste­re di parole o numeri. Se un utente cerca contenuti specifici su un sito web, di solito inserisce uno o due termini di ricerca per­ti­nen­ti al tema. Invece di eseguire la scansione dell’intero sito web per queste parole con i crawler, Solr utilizza la libreria.

Essa indicizza tutte le parole chiave im­por­tan­ti quasi in tempo reale e le collega ai documenti sul sito web che con­ten­go­no le parole ricercate. La ricerca passa sem­pli­ce­men­te at­tra­ver­so l’indice per trovare un termine. L’elenco dei risultati mostra tutti i documenti che, secondo l’indice, con­ten­go­no questa parola almeno una volta. Questo tipo di ricerca cor­ri­spon­de alla ricerca analogica all’interno di un libro di testo: se cercate una parola chiave potete andare alla fine del libro, dove si trova l’elenco dei concetti prin­ci­pa­li e delle pagine nelle quali compare quella parola. Allo stesso modo la ricerca web verticale mostra un elenco di risultati con i col­le­ga­men­ti ai ri­spet­ti­vi documenti.

Affinché questo processo funzioni senza intoppi, in teoria bi­so­gne­reb­be inserire tutte le parole chiave e i metadati (ad esempio autore o anno di pub­bli­ca­zio­ne) nella libreria ogni qualvolta si inserisce un nuovo documento nel portfolio del sito web. Di con­se­guen­za il lavoro in back end per Lucene è talvolta un po’ mac­chi­no­so. Ma con Solr questi passaggi possono essere au­to­ma­tiz­za­ti.

Rilevanza e filtri

Apache Solr utilizza l’ontologia e la tas­so­no­mia di Lucene per produrre risultati di ricerca estre­ma­men­te accurati. Le variabili booleane e i me­ta­ca­rat­te­ri, già noti da Lucene, sono qui di grande aiuto. Solr aggiunge una cache di livello superiore a quella di Lucene. Ciò significa che il servlet ricorda le query più frequenti, anche se con­si­sto­no in variabili complesse, e ottimizza quindi la velocità di ricerca.

Se volete tenere gli utenti sul vostro sito web, dovreste offrire loro una buona user ex­pe­rien­ce. Ciò include in par­ti­co­la­re la capacità di fare offerte giuste. Ad esempio se i vostri vi­si­ta­to­ri sono alla ricerca di in­for­ma­zio­ni sull’al­le­va­men­to di polli, i testi relativi all’al­le­va­men­to e alle abitudini ali­men­ta­ri dei polli do­vreb­be­ro apparire tra i primi risultati di ricerca, in cima alla lista. Le ricette con pollo o anche i film sui polli, invece non do­vreb­be­ro far parte dei risultati di ricerca, o quan­to­me­no do­vreb­be­ro apparire in fondo alla lista.

In­di­pen­den­te­men­te dal fatto che gli utenti stiano cercando un termine specifico o che debbano essere loro mostrati in­te­res­san­ti proposte di temi attinenti con link interni alla fine di un articolo, rimane il fatto che la rilevanza dei risultati è la cosa più im­por­tan­te. E per fare in modo che a chi cerca vengano mostrati soltanto i risultati di ricerca per lui rilevanti, Solr utilizza il tf-idf.

Fatto
Il termine Term Frequency-Inverse Document Frequency, o tf-idf (in italiano: frequenza del termine per frequenza inversa del documento) indica una sta­ti­sti­ca numerica. La densità del termine di ricerca in un documento (ovvero il numero di volte in cui un singolo termine appare nel testo) viene con­fron­ta­ta con il numero di documenti dell’intero pool di ricerca che contiene il termine. In questo modo si può vedere se un termine di ricerca si verifica più fre­quen­te­men­te in un documento rispetto alla totalità dei testi.

Solr: le funzioni più im­por­tan­ti

Apache Solr raccoglie e indicizza i dati quasi in tempo reale grazie a Lucene Core. In questo caso i dati indicano i documenti. Sia nella ricerca sia nell’indice il documento è l’unità di misura decisiva. L’indice è composto da diversi documenti che a propria volta sono composti da diversi campi di testo. Nel database i documenti si trovano nelle righe della tabella, mentre i campi sono nelle colonne.

Ac­cop­pia­to ad Apache Zookeper at­tra­ver­so un’API, Solr dispone di un punto di appoggio che fornisce la sin­cro­niz­za­zio­ne, i registri dei nomi e la di­stri­bu­zio­ne della con­fi­gu­ra­zio­ne. Ciò include, ad esempio, un algoritmo ad anello che assegna ai processi un coor­di­na­to­re (detto leader) all’interno di un sistema di­stri­bui­to. Zookeeper, un trouble shooter ben col­lau­da­to, riavvia i processi anche quando i token vanno persi e trova nodi (computer nel sistema) uti­liz­zan­do Node Discovery. Tutte queste fun­zio­na­li­tà as­si­cu­ra­no che il vostro progetto rimanga sempre li­be­ra­men­te scalabile.

Ciò significa anche che il motore di ricerca funzioni anche nelle con­di­zio­ni più difficili. Come accennato in pre­ce­den­za, anche i siti web ad alta intensità di traffico che ar­chi­via­no e ge­sti­sco­no enormi quantità di dati ogni giorno uti­liz­za­no Apache Solr.

Se un singolo server Solr non è suf­fi­cien­te, si possono sem­pli­ce­men­te collegare più server tramite il cloud Solr. Quindi potete fram­men­ta­re i vostri dati oriz­zon­tal­men­te, ope­ra­zio­ne chiamata anche sharding. Per fare ciò dividete la vostra libreria in frammenti lo­gi­ca­men­te collegati, in modo da espandere la vostra bi­blio­te­ca oltre lo spazio di­spo­ni­bi­le. Apache consiglia inoltre di caricare più copie della libreria su server diversi per aumentare il fattore di re­pli­ca­zio­ne. Se infatti arrivano nello stesso istante molte richieste, esse verranno di­stri­bui­te su diversi server.

La ricerca full-text, offerta già da Lucene, viene estesa con Solr a funzioni di ricerca ag­giun­ti­ve, che includono:

  • Adat­ta­men­to dei termini anche per gruppi di parole: il sistema rileva errori di or­to­gra­fia nell’input di ricerca e fornisce risultati per un’al­ter­na­ti­va corretta.
  • Join: una com­bi­na­zio­ne tra prodotto car­te­sia­no (vengono con­si­de­ra­ti più termini durante la ricerca in qualsiasi ordine) e selezione (vengono vi­sua­liz­za­ti solo i termini che sod­di­sfa­no una de­ter­mi­na­ta con­di­zio­ne), in pratica una sintassi booleana complessa di variabili.
  • Rag­grup­pa­men­to di termini correlati.
  • Clas­si­fi­ca­zio­ne sfac­cet­ta­ta: il sistema organizza ogni singolo elemento in­for­ma­ti­vo in base a diverse di­men­sio­ni. Ad esempio, associa un testo a parole chiave come nome dell’autore, lingua e lunghezza del testo. Inoltre ci sono gli argomenti trattati nel testo, nonché una clas­si­fi­ca­zio­ne temporale.
  • Ricerca con me­ta­ca­rat­te­ri: un segno sta per un elemento in­de­fi­ni­to o ad­di­rit­tu­ra per più elementi in una stringa? Se si tratta di un solo elemento infinito, si utilizza “?”, se invece sono molti si utilizza “*”. Ad esempio è possibile inserire un frammento di parola più un me­ta­ca­rat­te­re (ad esempio insegn*): in questo modo l’elenco dei risultati includerà tutti i termini che hanno il frammento di parola data come radice (ad esempio in­se­gna­men­to, in­se­gnan­te, insegnare). In questo modo gli utenti ricevono risultati della ricerca rilevanti su questo argomento. La ne­ces­sa­ria rilevanza deriva dalla li­mi­ta­zio­ne dell’argomento nella vostra libreria o da ulteriori de­li­mi­ta­zio­ni di ricerca. Se invece un utente cerca ad esempio “ma?e” otterrà i risultati come “male”, “mare”, ecc. Tuttavia la ricerca non include termini come “ma­reg­gia­ta”, “maremoto” o simili, perché il punto di domanda indica una sola lettera.
  • Rileva il testo in molti formati, da Microsoft Word a editor di testo in PDF e contenuti mul­ti­me­dia­li in­di­ciz­za­ti.
  • Riconosce diverse lingue.

Inoltre il servlet può in­cor­po­ra­re più nuclei (inglese: core) che sono co­sti­tui­ti da indici Lucene. Quindi questi nuclei rac­col­go­no tutte le in­for­ma­zio­ni in una libreria, dove si possono trovare anche i file e gli schemi di con­fi­gu­ra­zio­ne. In questo modo impostate il com­por­ta­men­to di Apache Solr. Se si desidera uti­liz­za­re le esten­sio­ni, è suf­fi­cien­te integrare i propri script o plug-in dai post della community ai file di con­fi­gu­ra­zio­ne.

Vantaggi Svantaggi
Estende Lucene con pratiche feature In­di­ciz­za­zio­ne au­to­ma­ti­ca in tempo reale Ricerca full-text Sfac­cet­ta­tu­ra e rag­grup­pa­men­to di parole chiave Pieno controllo sui frammenti Al­leg­ge­ri­sce il ri­di­men­sio­na­men­to oriz­zon­ta­le dei server di ricerca Facile da integrare nel proprio sito web Poco adatto per dati e oggetti dinamici L’aggiunta di core e la divisione di frammenti è possibile solo ma­nual­men­te La cache globale può costare tempo e spazio rispetto alla cache seg­men­ta­ta.

Tutorial: scaricare e con­fi­gu­ra­re Apache Solr

I requisiti di sistema per Solr non sono par­ti­co­lar­men­te elevati. Tutto ciò di cui avete bisogno è un Java SE Runtime En­vi­ron­ment a partire dalla versione 1.9.0. Gli svi­lup­pa­to­ri hanno testato il servlet su Linux/Unix, macOS e Windows in diverse versioni. Basta scaricare l’apposito pacchetto di in­stal­la­zio­ne ed estrarre il file .zip (pacchetto Windows) o il file .tgz (pacchetti Unix, Linux OSX) in una directory a vostra scelta.

Tutorial Solr, passo 1: download e avvio

1. Visitate la pagina del progetto Solr nel progetto prin­ci­pa­le Apache Lucene. Nella parte superiore della finestra viene vi­sua­liz­za­ta la barra del menu. Alla voce “Features” Apache vi informa bre­ve­men­te sulle funzioni di Solr. Per i tutorial e la do­cu­men­ta­zio­ne uti­liz­za­te la voce “Recources”. Nella sezione “Community”, infine, i par­te­ci­pan­ti alla community di Solr vi aiu­te­ran­no nel caso abbiate domande. In questa sezione è inoltre possibile con­tri­bui­re con propri build.

2. Per l’in­stal­la­zio­ne cliccate sul pulsante di download, che vi porterà alla pagina di download con un elenco di mirror download. In cima alla lista dovreste trovare la versione più recente di Solr (7.3 a maggio 2018) di un fornitore testato. In al­ter­na­ti­va è possibile scegliere tra i link HTTP e il download FTP. Cliccando su un link, si accede alla pagina mirror del ri­spet­ti­vo provider.

3. Nella figura sopra potete vedere i vari pacchetti di download di­spo­ni­bi­li per la selezione, in questo caso per Solr versione 7.3.

  • solr-7.3.0-src.tgz è il pacchetto per gli svi­lup­pa­to­ri. Contiene il codice sorgente in modo da poter lavorare su di esso al di fuori della community GitHub.
  • solr-7.3.0.tgz è la versione per utenti Mac, Linux o Unix.
  • solr-7.3.0.zip contiene il pacchetto Solr com­pa­ti­bi­le con Windows.
  • Nella cartella changes/ è possibile trovare la do­cu­men­ta­zio­ne per la versione cor­ri­spon­den­te.

Dopo aver se­le­zio­na­to con un clic la versione più adatta alle vostre esigenze, si aprirà una finestra di download. Salvate il file e una volta com­ple­ta­to il download, cliccate sul pulsante di download nel browser o aprite la cartella di download.

4. Estraete il file zip o il file .tgz. Se volete iniziare a fa­mi­lia­riz­za­re con Solr, se­le­zio­na­te una directory dove salvare i file de­com­pres­si. Se sapete già in quale misura volete uti­liz­za­re Solr, scegliete il server previsto per le attività che intendete svolgere. Oppure costruite un ambiente cloud Solr in cluster se volete scalare verso l’alto (trovate maggiori in­for­ma­zio­ni sul cloud nel prossimo capitolo).

N.B.
Teo­ri­ca­men­te una singola libreria di Lucene può in­di­ciz­za­re circa 2,14 miliardi di documenti. In pratica, però, non si rag­giun­ge­rà mai questo numero senza che il numero dei documenti inizi a influire sulla per­for­man­ce. Per un numero re­la­ti­va­men­te elevato di documenti, è quindi con­si­glia­bi­le pia­ni­fi­ca­re fin dall’inizio con un cloud Solr.

5. Nel nostro esempio Linux, Solr è su Home. Stiamo lavorando con Solr 7.3.0. Il codice di questo tutorial è stato testato in Ubuntu. È inoltre possibile uti­liz­za­re gli esempi per macOS. In linea di principio i comandi fun­zio­na­no anche sotto Windows, ma con black­slash invece di normali slash.

Inserite “cd /[percorso sorgente]” nella riga di comando per aprire la cartella Solr e avviare il programma. Nel nostro esempio appare in questo modo:

cd /home/test/Solr/solr-7.3.0
bin/solr start

Il server Solr è ora in ese­cu­zio­ne sulla porta 8983 e il vostro firewall potrebbe chiedervi se lo per­met­te­te. Con­fer­ma­te­lo.

Se volete fermare Solr, inserite il seguente comando:

bin/solr stop -all

Se Solr funziona, fa­mi­lia­riz­za­te con il software. Con la demo di Solr è possibile avviare il programma in una delle quattro modalità:

  • Solr Cloud (comando: cloud)
  • Gestore dell’im­por­ta­zio­ne dei dati (comando: dih)
  • Senza schema (comando: sche­ma­less)
  • Esempio det­ta­glia­to con Kitchen Sink (comando: te­ch­pro­duc­ts)

Gli esempi hanno ciascuno uno schema adattato. Lo si modifica uti­liz­zan­do l’in­ter­fac­cia dello schema. Per farlo inserite questo comando (il se­gna­po­sto [esempio] sta per una delle parole chiave sopra spe­ci­fi­ca­te):

bin/solr -e [esempio]

6. In questo modo Solr fun­zio­ne­rà nella modalità cor­ri­spon­den­te. Se si vuole essere sicuri, ri­chia­ma­te lo sta­tu­sre­port:

bin/solr status
Found 1 Solr nodes:
Solr process xxxxx running on port 8983

7. Gli esempi con­ten­go­no im­po­sta­zio­ni di base pre­con­fi­gu­ra­te. Se si inizia senza un esempio, è ne­ces­sa­rio definire da soli lo schema e il nucleo. Il nucleo memorizza i vostri dati. Senza di esso non è possibile né in­di­ciz­za­re né cercare i file. Per creare un nucleo inserite il seguente comando:

bin/solr create –c <nome_del_nucleo>

8. Apache Solr ha un’in­ter­fac­cia utente basata sul web. Se il programma è stato avviato con successo, è possibile trovare l’ap­pli­ca­zio­ne web Solr Admin nel proprio browser all’indirizzo http://localhost:8983/solr/.

9. Infine fermate Solr con questo comando:

bin/solr stop -all

Tutorial Solr, parte 2: i primi passi

Solr fornisce un semplice strumento di comando. Con il co­sid­det­to post-tool potete caricare contenuti sul vostro server. Si può trattare di documenti per l’indice così come di con­fi­gu­ra­zio­ni dello schema. A questo scopo il tool accede alla vostra raccolta. Pertanto è sempre ne­ces­sa­rio spe­ci­fi­ca­re il nucleo o la raccolta prima di lavorarci.

Nel seguente esempio di codice, diamo in­nan­zi­tut­to la forma generale: so­sti­tu­ti­te <raccolta> con il nome del vostro nucleo/raccolta. “-c” è il comando “create”, con il quale si creano nuclei o raccolte. Lì si impostano opzioni ag­giun­ti­ve o si eseguono comandi. Ad esempio è possibile uti­liz­za­re “-p” per se­le­zio­na­re una porta e “*.xml” o “*.csv” per caricare tutti i file con il formato ap­pro­pria­to nella propira col­le­zio­ne (righe due e tre). Il comando “-d” elimina i documenti dalla vosra raccolta (riga quattro).

bin/post –c <raccolta> [Optionen] <file|raccolte|url></file|raccolte|url></raccolta>
bin/post –c <raccolta> -p 8983 *.xml</raccolta>
bin/post –c <raccolta> *.csv</raccolta>
bin/post –c <raccolta> -d '<delete><id>42</id><delete>'</delete></delete></raccolta>

Ora conoscete alcuni dei comandi di base per Solr. L’esempio della versione demo di kitchen sink vi mostrerà esat­ta­men­te come impostare Apache Solr.

1. Avviate Solr con la versione demo. Per la demo kitchen-sink uti­liz­za­te il comando te­ch­pro­duc­ts. Inserite nel terminale il seguente testo:

bin/solr –e techproducts

Solr parte di default dalla porta 8983. Il terminale vi dice che sta creando un nuovo nucleo per la vostra raccolta e in­di­ciz­zan­do alcuni file di esempio per il vostro catalogo. Nella demo kitchen-sink dovreste vedere quanto segue:

Creating Solr home directory /tmp/solrt/solr-7.3.1/example/techproducts/solr
Starting up Solr on port 8983 using command:
bin/solr start -p 8983 -s "example/techproducts/solr"
Waiting up to 30 seconds to see Solr running on port 8983 [/]
Started Solr server on port 8983 (pid=12281). Happy searching!
Setup new core instance directory:
/tmp/solrt/solr-7.3.1/example/techproducts/solr/techproducts
Creating new core 'techproducts' using command:
http://localhost:8983/solr/admin/cores?action=CREATE&name=techproducts&instanceDir=techproducts
{"responseHeader":
{"status":0,
"QTime":2060},
"core":"techproducts"}
Indexing tech product example docs from /tmp/solrt/solr-7.4.0/example/exampledocs
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/techproducts/update…
using content-type application/xml...
POSTing file money.xml to [base]
POSTing file manufacturers.xml to [base]
POSTing file hd.xml to [base]
POSTing file sd500.xml to [base]
POSTing file solr.xml to [base]
POSTing file utf8-example.xml to [base]
POSTing file mp500.xml to [base]
POSTing file monitor2.xml to [base]
POSTing file vidcard.xml to [base]
POSTing file ipod_video.xml to [base]
POSTing file monitor.xml to [base]
POSTing file mem.xml to [base]
POSTing file ipod_other.xml to [base]
POSTing file gb18030-example.xml to [base]
14 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/techproducts/update...
Time spent: 0:00:00.486
Solr techproducts example launched successfully. Direct your Web browser to
http://localhost:8983/solr to visit the Solr Admin UI

2. Solr è ora in ese­cu­zio­ne e ha già caricato alcuni file XML nell’indice. Potete lavorarci più tardi. Nel passo suc­ces­si­vo dovreste cercare di inserire au­to­no­ma­men­te alcuni file nell’index. L’in­ter­fac­cia utente di Solr admin rende tutto questo ab­ba­stan­za semplice. Ri­chia­ma­te il server Solr nel vostro browser. Nella nostra demo te­ch­pro­duc­ts Solr specifica già il server e la porta. Quindi inserite nel vostro browser il seguente indirizzo: 'http://localhost:8983/solr/'.

Se avete già definito voi stessi il nome di un server e una porta, uti­liz­za­te il seguente modulo e inserite il nome del sereer e il numero di porta nel luogo ap­pro­prioa­to: 'http://[Ser­ver­na­me]:[Port-number]/solr/'.

Qui con­trol­la­te la cartella example/exam­ple­docs. Questa cartella contiene i file di esempio e il file post.jar. Se­le­zio­na­te un file che de­si­de­ra­te ag­giun­ge­re al catalogo e uti­liz­za­te post.jar per ag­giun­ge­re il file. Per il nostro esempio prendiamo more_books.jsonl.

Per fare ciò, inserite nel terminale:

cd example/exampledocs
Java -Dc=techproducts –jar post.jar more_books.jsonl

Se Solr ha caricato con successo il vostro file nell’indice, ri­ce­ve­re­te il seguente messaggio:

SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/techproducts/update 
POSTing file more_books.jsonl to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/techproducts/update...
Time spent: 0:00:00.162

3. Se state con­fi­gu­ran­do il server di ricerca Apache Solr, è ne­ces­sa­rio con­fi­gu­ra­re di­ret­ta­men­te i file di con­fi­gu­ra­zio­ne e lo schema. Essi sono riportati negli esempi di­mo­stra­ti­vi. Se si sta lavorando su un nuovo server, è ne­ces­sa­rio de­ter­mi­na­re da sé il set di con­fi­gu­ra­zio­ne e lo schema.

Lo schema (schema.xml) determina il numero, il tipo e la struttura dei campi. Come già accennato, un documento di Lucene è co­sti­tui­to da campi. Questa sud­di­vi­sio­ne facilita la ricerca mirata a testo integrale. Solr lavora con questi campi. Un certo tipo di campo accetta de­ter­mi­na­ti contenuti (per esempio <date> accetta solo le date nel modulo anno-mese-giorno-ora). Con lo schema de­ter­mi­na­te quali tipi di campi l’indice ri­co­no­sce­rà suc­ces­si­va­men­te e come li assegna. Se non lo fate, i documenti inseriti nel sistema spe­ci­fi­ca­no i tipi di campo. Questo è utile nella fase di test, perché è suf­fi­cien­te iniziare a riempire il catalogo. In un secondo tempo, tuttavia, tale procedura può portare a problemi.

Questi sono alcuni dei tipi di campo di base in Solr:

  • Da­te­Ran­ge­Field (indicizza in­ter­val­li di tempi e momenti precisi fino al mil­li­se­con­do)
  • Ex­ter­nal­Fi­le­Field (estrae valori da una cartella esterna)
  • TextField (campo generale per l’in­se­ri­men­to del testo)
  • Bi­na­ry­Field (per dati binari)
  • Cur­ren­cy­Field indicizza due valori se­pa­ra­ta­men­te, ma li presenta all’utente finale come un unico valore. Cur­ren­cy­Field memorizza un valore numerico (per esempio, 4,50) e una valuta (per esempio, €) ciascuno in un campo. L’utente finale vede entrambi i valori insieme (ossia 4,50€).
  • StrField (UTF-8 e stringa Unicode per un piccolo campo. Non vengono ana­liz­za­ti o vengono so­sti­tui­ti da un token.)

Nel Wiki di Solr potete trovare un elenco det­ta­glia­to dei tipi di campo Solr, nonché altri comandi per le im­po­sta­zio­ni dello schema.

Per spe­ci­fi­ca­re i tipi di campo, ri­chia­ma­te lo schema.xml all’indirizzo "http://localhost:8983/solr/te­ch­pro­duc­ts/schema". Te­ch­pro­duc­ts ha già definito i tipi di campo. Una riga di comando nel file XML descrive in dettaglio le proprietà di un campo uti­liz­zan­do gli attributi. Secondo la do­cu­men­ta­zio­ne, Apache Solr permette i seguenti attributi per un campo:

  • field name (non può essere lasciato vuoto. Contiene il nome del campo.)
  • type (qui inserite un tipo di campo valido, anche questo non può essere lasciato vuoto.)
  • indexed (significa “inserito nell’indice”. Se il valore è “true” è possibile cercare il campo o ordinarlo.)
  • stored (indica se un campo è me­mo­riz­za­to, e il suo valore è su “true” significa che il campo può essere ri­chia­ma­to.)
  • mul­ti­Va­lued (se un campo contiene più valori per un documento, inserite qui il valore “true”.)
  • default (qui si immette un valore pre­de­fi­ni­to che appare se non è stato definito alcun valore per un nuovo documento.)
  • com­pres­sed (raramente impostato di default su “false”, poiché ap­pli­ca­bi­le solo ai campi com­pri­mi­bi­li in gzip. Deve essere impostato su “true” per poter com­pri­me­re.)
  • omitNorms (impostato di default su “true”. Salva gli standard per un campo e risparmia in questo modo anche memoria.)
  • ter­mOff­se­ts (richiede più spazio di ar­chi­via­zio­ne. Memorizza i vettori insieme alle in­for­ma­zio­ni di offset, cioè le aggiunte di indirizzi di memoria.)
  • term­Po­si­tions (ha bisogno di più spazio di ar­chi­via­zio­ne perché memorizza la posizione dei termini insieme al vettore.)
  • term­Vec­tors (per im­po­sta­zio­ne pre­de­fi­ni­ta è impostato su false, se è su “true” memorizza i termini vet­to­ria­li.)

È possibile inserire le proprietà del campo di­ret­ta­men­te nel file xml dello schema o usare un comando nel terminale. Questo è l’aspetto di un semplice tipo di campo nel file xml dello schema:

<fields>
<field name="name" type="text_general" indexed="true" multivalued=”false” stored="true" />
</fields>

In al­ter­na­ti­va è possibile uti­liz­za­re nuo­va­men­te il terminale di ingresso. Qui e suf­fi­cien­te inserire un comando Curl, definire le proprietà del campo e inviarlo tramite un’in­ter­fac­cia dello schema inserendo l’indirizzo del file:

curl -X POST -H 'Content-type:application/json' --data-binary '{"add-field": {"name":"name", "type":"text_general", "multiValued":false, "stored":true}}' http://localhost:8983/solr/techproducts/schema

4. Dopo aver regolato lo schema, è tocca alla con­fi­gu­ra­zio­ne di Solr. Con essa si de­fi­ni­sco­no le im­po­sta­zio­ni di ricerca. Ecco i com­po­nen­ti im­por­tan­ti:

  • Richiesta dei parametri della cache
  • Gestore della richiesta (anche: request handler)
  • Ubi­ca­zio­ne dell’elenco dei dati
  • Com­po­nen­te di ricerca

I parametri di cache della richiesta con­sen­to­no tre tipi di cache: LRUCache, LFUCache e Fa­stLUR­Ca­che. LRUCache utilizza una hash map collegata, Fa­stL­RU­Ca­che racoglie dati su una hash map con­co­mi­tan­te. Questa hash map elabora le richieste con­tem­po­ra­nea­men­te. In questo modo, il server di ricerca produce risposte più ve­lo­ce­men­te se molte query di ricerca arrivano in parallelo. Il Fa­stL­RU­Ca­che legge i dati più ve­lo­ce­men­te del LRUCache e li inserisce più len­ta­men­te.

Fatto
Una mappa hash (detta anche hash map) assegna valori ad una chiave. La chiave è unica, ciò significa che c’è solo un valore per chiave. Una tale chiave è qualsiasi oggetto, che viene uti­liz­za­to per calcolare il valore di hash. Questo è pra­ti­ca­men­te l’“indirizzo”, cioè la posizione esatta nell’indice. È possibile uti­liz­zar­lo per trovare valori chiave all’interno di una tabella.

Il gestore della richiesta elabora appunto le richieste. Esso legge il pro­to­col­lo HTTP, cerca nell’indice e fornisce le risposte. La con­fi­gu­ra­zio­ne dell’elempo Te­ch­pro­duc­ts include il gestore pre­de­fi­ni­to per Solr. È possibile trovare i com­po­nen­ti di ricerca come elenco nel getstore della query. Questi elementi eseguono la ricerca. Per im­po­sta­zio­ne pre­de­fi­ni­ta, il gestore contiene i seguenti com­po­nen­ti di ricerca:

  • query (richiesta)
  • facet (sfac­cet­ta­tu­ra)
  • mlt (More Like This)
  • highlight (migliore)
  • stats (sta­ti­sti­che)
  • debug (cor­reg­ge­re il bug)
  • expand (espandere la ricerca)

Per il com­po­nen­te di ricerca More Like This (mlt), ad esempio, digitate questo comando:

<searchComponent name="mlt" class="org.apache.solr.handler.component.MoreLikeThisComponent" />

More Like This trova documenti che sono simili nel contenuto e nella struttura. Esiste come classe all’interno di Lucene. La query trova il contenuto per i vi­si­ta­to­ri del vostro sito web con­fron­tan­do la stringa e i campi in­di­ciz­za­ti.

Per con­fi­gu­ra­re l’elenco, aprite in­nan­zi­tut­to il gestore della query:

<requestHandler name="standard" class="solr.SearchHandler" default="true">
<lst name="defaults">
<str name="echoParams">explicit</str>
<!--
<int name="rows">10</int>
<str name="fl">*</str>
<str name="version">2.1</str>
-->
</lst>
</requestHandler>

Ag­giun­ge­te i com­po­nen­ti che avete definito voi stessi all’elenco nel gestore della query o mo­di­fi­ca­te i com­po­nen­ti di ricerca esistenti. La ricerca riprende questi com­po­nen­ti quando un vi­si­ta­to­re di una pagina web inserisce suc­ces­si­va­men­te una query di ricerca sul vostro dominio. Il seguente comando inserisce un com­po­nen­te au­to­co­strui­to prima dei com­po­nen­ti standard:

<arr name="first-components"></arr>
<str>NameOfTheOwnComponent</str>

Ecco come inserire il com­po­nen­te dopo i com­po­nen­ti standard:

<arr name="last-components"></arr>
<str>NameOfTheOwnComponent</str>

Così invece ri­no­mi­na­te i com­po­nen­ti esistenti:

<arr name="components"></arr>
<str>facet</str>
<str>NameOfTheOwnComponent</str>

La directory dei dati pre­de­fi­ni­ta si trova nella directory dell’istanza prin­ci­pa­le “in­stan­ce­Dir” sotto il nome “/data”. Se si vuole uti­liz­za­re una cartella diversa, cambiate la posizione uti­liz­zan­do solr­con­fig.xml. Per farlo basta inserire un percorso fisso o associare il nome della directory al core (SolrCore) o alla directory di istanza (in­stan­ce­Dir). Per il col­le­ga­men­to al core, scrivete:

<datadir>/solr/data/$(solr.core.name)</datadir>

Tutorial Solr, parte 3: costruire un cluster cloud Solr

Apache Solr fonisce una demo cloud che spiega come con­fi­gu­ra­re un cluster cloud. Na­tu­ral­men­te è anche possibile allo stesso tempo mettere in pratica da soli l’esempio. Per prima cosa avviate l’in­ter­fac­cia della riga di comando. Per avviare Solr in modalità cloud, immettete quanto segue nel tool:

1. In­nan­zi­tut­to avviate l’in­ter­fac­cia utente per la riga di comando. Per avviare Solr in modalità cloud, digitate nello strumento quanto segue:

bin/solr -e cloud

Così inizia la demo.

2. Spe­ci­fi­ca­te quanti server (qui: nodes) devono essere collegati tramite cloud. Il numero può essere compreso tra [1] e [4] (nell’esempio sono [2]). La demo funziona su una macchina, ma utilizza una porta diversa per ogni server, che spe­ci­fi­ca­te suc­ces­si­va­men­te (la demo specifica i numeri di porta).

Welcome to the SolrCloud example!
This interactive session will help you launch a SolrCloud cluster on your local workstation.
To begin, how many Solr nodes would you like to run in your local cluster? (specify 1-4 nodes) [2]
Please enter the port for node1 [8983]
Please enter the port for node2 [7574]
solr start –cloud -s example/cloud/node1/solr -p 8983
solr start –cloud -s example/cloud/node2/solr -p 7574

Una volta allocate tutte le porte, lo script inizia a muoversi e mostra i comandi per avviare il server (come mostrato sopra).

3. Se tutti i server sono in funzione, scegliete un nome per la vostra raccolta di dati (le parentesi quadre indicano i se­gna­po­sto e non appaiono nel codice).

Please provide a name for your new collection: [Enter_Name_HERE]

4. Create da questa col­le­zio­ne un frammento con SPLI­TSHARD. È possibile sud­di­vi­dre il tutto in par­ti­zio­ni in un secondo momento. Questo accellerà la ricerca se vengono ri­ce­vu­te­più richieste con­tem­po­ra­nea­men­te.

http://localhost:8983/solr/admin/collections?action=CREATESHARD&shard=[NewFragment]&collection[CollectionName]

Dopo aver creato i frammenti con SPLI­TSHARD, è possibile di­stri­bui­re i dati uti­liz­zan­do un router. Solr integra di default il router com­po­si­teID (router.jey=com­po­si­teld).

At­tra­ver­so l’in­ter­fac­cia si divide il frammento in due parti. Entrambe le par­ti­zio­ni con­ten­go­no la stessa copia dei dati originali. L’indice li divide solo lungo le nuove sottozone create di recente.

Fatto

Un router determina come i dati debbano essere di­stri­bui­ti tra i frammenti e quanti bit utilizza la chiave del router. Ad esempio, se si uti­liz­za­no 2 bit, il router indicizza i dati a un quarto dello spazio di ar­chi­via­zio­ne per frammento. In questo modo si evita che grandi serie di dati su un singolo frammento occupino l’intera memoria, ral­len­tan­do la ricerca. Per uti­liz­za­re il router, inserite un valore del router (ad esempio, un nome utente come MaxMuster1), il numero di bit e l’iden­ti­fi­ca­zio­ne del documento: [Nome utente] / [Numero di bit]! [Iden­ti­fi­ca­zio­ne del documento] (ad esempio: MaxMuster1/2!1234)

/admin/collections?action=SPLITSHARD&collection=[NomeDellaRaccolta]&shard=[NumeroDelFrammento]

5. Nell’ultimo passo, spe­ci­fi­ca­te il nome della vostra directory di con­fi­gu­ra­zio­ne. Sono di­spo­ni­bi­li a scelta modelli sample-te­ch­pro­duc­ts-configs e _default. Quest’ultimo non specifica uno schema, quindi è comunque possibile per­so­na­liz­za­re il proprio schema. Uti­liz­za­te il seguente comando per di­sa­bi­li­ta­re la funzione senza schema da _default per l’in­ter­fac­cia cloud di Solr:

curl http://localhost:8983/api/collections/[_nome_della_raccolta]/config -d &apos;{"set-user-property": {"update.autoCreateFields":"false"}}&apos;

Ciò impedisce ai campi di creare essi stessi schemi in­com­pa­ti­bi­li con il resto dei file, dati i contenuti iniziali. Poiché avete bisogno del metodo http POST per questa im­po­sta­zio­ne, non potete sem­pli­ce­men­te uti­liz­za­re la barra degli indirizzi del browser. localhost:8983 è il primo server. Se avete scelto un numero di porta diverso, dovete inserirlo lì. So­sti­tu­ti­te [_nome_della_raccolta] con un nome di vostra scelta.

Ecco come si imposta il cloud Solr. Per vedere se la vostra nuova raccolta è vi­sua­liz­za­ta cor­ret­ta­men­te, con­trol­la­te di nuovo lo stato:

bin/solr status

At­tra­ver­so l’in­ter­fac­cia utente di am­mi­ni­stra­zio­ne potete avere una pa­no­ra­mi­ca più det­ta­glia­ta della di­stri­bu­zio­ne dei vostri frammenti. L’indirizzo è composto dal nome del server con il numero di porta e dalla con­nes­sio­ne al cloud Solr in questo formato: "http://ser­ver­na­me:port­num­mer/solr/#/~cloud".

Estendere Apache Solr con i plug-in

Apache Solr ha già alcune esten­sio­ni, che sono i co­sid­det­ti handler o gestori. Pre­ce­den­te­men­te abbiamo già in­tro­dot­to il gestore della query. Lucene (e quindi Solr) supporta anche alcuni utili script nativi come la classe Solr Analyzer e la classe Si­mi­la­ri­ty. Potete integrare plug-in in Solr tramite un file JAR. Se costruite i vostri plug-in e in­te­ra­gi­te con le in­ter­fac­ce di Lucene, dovreste ag­giun­ge­re i *.jar Lucene dalla vostra libreria (solr/lib/) al classpath che usate per creare il codice sorgente del plug-in.

Questo metodo funziona se si utilizza solo un core. Se uti­liz­za­te il cloud Solr, create una libreria comune per i file JAR. Per fare ciò, create una directory con l’attributo “sharedLib” nel file solr.xml sul proprio servlet. Questo è un modo semplice per caricare plug-in su singoli core:

Se avete creato il vostro proprio nucleo, create una directory per la libreria con il comando “mkdir” (Windows: “md”) in questa forma:

mkdir solr/[esempio]/solr/raccoltaA/lib

Fa­mi­lia­riz­za­te un po’ con Solr provando una delle demo che vi vengono fornite, o digitate “example/solr/lib”. In entrambi i casi ci si trova ora nella directory della libreria della directory di istanza. Lì salvate i file plug-in JAR.

In al­ter­na­ti­va, è possibile uti­liz­za­re il vecchio metodo dalle versioni pre­ce­den­ti di Solr se, ad esempio, non avete alcun successo sul con­te­ni­to­re servlet con la prima variante.

  • Per fare ciò, de­com­pri­me­te il file solr.war.
  • Quindi ag­giun­ge­te il file JAR con le classi da voi create alla directory WEB-INF/lib. Potete trovare la directory tramite l’app web in questo percorso: server/solr-webapp/webapp/WEB-INF/lib.
  • Com­pri­me­te nuo­va­men­te il file WAR mo­di­fi­ca­to.
  • Uti­liz­za­te il vostro solr.war per­so­na­liz­za­to.

Se estendete la libreria con un’opzione “dir”, essa ag­giun­ge­rà tutti i file all’interno della ri­spet­ti­va directory al classpath. Con “regex=” escludete i file che non cor­ri­spon­do­no alle pre­fe­ren­ze “regex”.

<lib dir="${solr.install.dir:../../../}/contrib/../lib" regex=".*\.jar"></lib>
<lib dir="${solr.install.dir:../../..}/dist/" regexe="plugin_name-\d.*\.jar"></lib>

Se state creando uno script plug-in da soli, il dialetto Lisp Clojure, tra gli altri, è rac­co­man­da­to per il Java Runtime. Questo lin­guag­gio di pro­gram­ma­zio­ne supporta lo sviluppo di programmi in­te­rat­ti­vi. Altre lingue integrano le proprie ca­rat­te­ri­sti­che native. Clojure le mette a di­spo­si­zio­ne tramite la bi­blio­te­ca. Questo metodo di lavoro è adatto per l’utilizzo del servlet Solr.

Il lin­guag­gio di pro­gram­ma­zio­ne e scripting Groovy supporta la ti­piz­za­zio­ne dinamica e statica sulla macchina virtuale Java. Il lin­guag­gio è basato su Ruby e Python ed è compilato in codice byte Java. Poi potete eseguirlo in uno script. Groovy è dotato di alcune ca­rat­te­ri­sti­che che estendono le funzioni di Java. Ad esempio, Groovy integra un semplice modello con il quale è possibile creare codice in SQL o HTML. Inoltre, la sintassi Groovy out of the box fornisce alcune espres­sio­ni comuni o campi di dati per le liste. Se elaborate JSON o XML per il vostro server di ricerca Solr, Groovy aiuta a mantenere la sintassi pulita e com­pren­si­bi­le.

Solr vs Ela­stic­search

Quando si tratta di motori di ricerca open source, Solr ed Ela­stic­search sono sempre ai primi posti nei test e nei sondaggi. Ed entrambi i server di ricerca sono basati sulla libreria Apache Java Lucene. Lucene è una base stabile. La bi­blio­te­ca indicizza le in­for­ma­zio­ni in modo fles­si­bi­le e fornisce ra­pi­da­men­te risposte a complesse richieste di ricerca. Su questa base, entrambi i motori di ricerca fun­zio­na­no in modo con­vin­cen­te. Ciascuno dei due progetti è inoltre sostenuto da un’attiva community.

Il team di sviluppo di Ela­stic­search lavora con GitHub, mentre Solr ha origine nella Apache Foun­da­tion. In confronto, il progetto Apache vanta una lunga storia alle proprie spalle e la community documenta tutti i cam­bia­men­ti, le ca­rat­te­ri­sti­che e i bug già dal 2007. La do­cu­men­ta­zio­ne di Ela­stic­search è di gran lunga meno completa, cosa che viene infatti criticata. Tuttavia, Ela­stic­search non ha niente da invidiare ad Apache in termini di usabilità.

Con Ela­stic­search potete costruire la vostra libreria in pochi passi. Per le funzioni ag­giun­ti­ve sono necessari invece plug-in premium. In questo modo è possibile gestire le im­po­sta­zio­ni di sicurezza, mo­ni­to­ra­re il server di ricerca o ana­lizz­za­re le metriche. Il server di ricerca raccoglie intorno a sé anche una famiglia di prodotti ben coor­di­na­ta. Sotto l’etichetta Elastic Stack e X-Pack si ottengono gra­tui­ta­men­te alcune funzioni di base. I pacchetti premium sono di­spo­ni­bi­li invece solo con un ab­bo­na­men­to mensile, con una licenza per nodo. Solr, d’altra parte, è sempre gratuito, incluse le esten­sio­ni come Tika e Zookeeper.

I due motori di ricerca si dif­fe­ren­zia­no prin­ci­pal­men­te riguardo ai loro punti focali: sia Solr che Ela­stic­search possono essere uti­liz­za­ti sia per piccoli set di dati che per big data, che sono di­stri­bui­ti in diversi ambienti. Ma mentre Solr si concentra sulla ricerca testuale, il concetto di Ela­stic­search combina la ricerca con l’analisi. Le metriche e i log sono elaborati dal servlet fin dall’inizio. Ela­stic­search gestisce fa­cil­men­te le cor­ri­spon­den­ti quantità di dati, perché il server integra di­na­mi­ca­men­te core e frammenti, e questo già dalla prima versione.

Ela­stic­search era più avanti rispetto al con­cor­ren­te Solr da questo punto di vista, ma da alcuni anni anche il cloud Solr consente la clas­si­fi­ca­zio­ne delle sfac­cet­ta­tu­re. Nei dati dinamici, Ela­stic­search rimane ancora un passo avanti, d’altra parte il con­cor­ren­te lo batte sui dati statici, fornendo risultati mirati per la ricerca full-text e cal­co­lan­do in modo esatto i dati.

I vari concetti di base si ri­flet­to­no anche nel caching: entrambi i fornitori con­sen­to­no in linea di principio il caching delle richieste. Se una query utilizza variabili booleane complesse, entrambi me­mo­riz­za­no gli elementi index ri­chia­ma­ti in segmenti, che possono fondersi in segmenti più grandi. Tuttavia, se si cambia solo un segmento, Apache Solr deve in­va­li­da­re l’intera cache globale e ri­ca­ri­car­la. Ela­stic­search invece limita questo processo al sot­to­seg­men­to in­te­res­sa­to. In questo modo si ri­spar­mia­no tempo e spazio di ar­chi­via­zio­ne.

Se si lavora re­go­lar­men­te con XML, http e Ruby, ci si abitua senza problemi anche a Solr. JSON, invece, è stato aggiunto suc­ces­si­va­men­te tramite un’in­ter­fac­cia. Ecco perché la lingua e il servlet non si adattano ancora per­fet­ta­men­te. Ela­stic­search invece comunica na­ti­va­men­te tramite JSON. Il server di ricerca integra altri linguaggi come Python, Java, .NET, Ruby e PHP con un’in­ter­fac­cia simile a REST.

In sintesi
Solr di Apache ed Ela­stic­search di Elastic sono due potenti server di ricerca, che possiamo rac­co­man­da­re senza esi­ta­zio­ni. Se ap­prez­za­te di più l’analisi dei dati e gestite un sito web dinamico, Ela­stic­search è pro­ba­bil­men­te la scelta ap­pro­pria­ta. Solr, d’altra parte, vi av­van­tag­ge­rà mag­gior­men­te se avete bisogno di una precisa ricerca a testo integrale per il vostro dominio. Con variabili complesse e filtri per­so­na­liz­za­bi­li, è possibile adattare per­fet­ta­men­te il motore di ricerca verticale alle proprie esigenze.
  Solr Ela­stic­search
Tipo Server di ricerca open source gratuito Server di ricerca su base open source gratuito con versioni pro­prie­ta­rie (gratuito o in ab­bo­na­men­to)
Linguaggi sup­por­ta­ti Nativi: Java, XML, HTTPAPI: JSON, PHP, Ruby, Groovy, Clojure Nativi: JSONAPI: Java, .NET, Python, Ruby, PHP
Database Librerie Java, NoSQL, con ontologia e tas­so­no­mia, in par­ti­co­la­re Lucene Librerie Java, NoSQL, in par­ti­co­la­re Lucene e Hadoop
Clas­si­fi­ca­zio­ne di frammenti e nodi Piuttosto staticoSi possono ag­giun­ge­re ma­nual­men­te nodi con Solr cloud e frammenti con SPLI­TSHARD­Solr7 e superiori: scalatura au­to­ma­ti­ca tramite in­ter­fac­cia­Con­trol­lo dei frammenti tramite algoritmo ad anel­lo­No­de Discovery con l’API Zookeeper Di­na­mi­coAg­giun­ge nodi e frammenti tramite tool interno, meno controllo tramite lea­der­No­de Discovery con tool Zen integrato
Cache Cache globale (si applica a tutti i sot­to­seg­men­ti in un segmento) Cache seg­men­ta­ta
Ricerca full-text Molte funzioni contenute nel codice sorgente – offre anche funzioni Lu­ce­ne­Ri­chie­sta Par­se­rAp­pli­ca­zio­ni di sug­ge­ri­men­ti­Ri­cer­ca per ana­lo­gia­Cor­ret­to­re or­to­gra­fi­co per diverse lin­gue­Com­pa­ti­bi­le con molti formati rich tex­tE­vi­den­zia­zio­ne La ricerca si basa prin­ci­pal­men­te sulle funzioni di LuceneL’in­ter­fac­cia per i sug­ge­ri­men­ti di ricerca cancella la maschera di ricerca per gli utenti finali, ma è meno per­so­na­liz­za­bi­le­Con­trol­lo or­to­gra­fi­co, matching tramite APIE­vi­den­zia­zio­ne meno per­so­na­liz­za­bi­le
Vai al menu prin­ci­pa­le