SlideShare a Scribd company logo
Progetto e sviluppo di un Search Component, nella
piattaforma Apache Solr,
per la classicazione semantica dei documenti
Relatore interno: Laureando:
Prof. Serafino Cicerone Enrico Santoro
Relatore esterno:
Ing. Paolo Cappuccini
Università degli Studi dell’Aquila
Dipartimento di Ingegneria e Scienze dell'Informazione e Matematica
Tesi di Laurea Magistrale in Ingegneria Informatica e Automatica
Anno Accademico 2013-2014
Azienda committente: KDM
• Ha sede a Roma
• Opera nel settore dell‘ICT
• Offre soluzioni e servizi
▫ Knowledge Management
▫ Gestione documentale
▫ Soluzioni gestionali aziendali
▫ …
• Dal 2014 ha avviato progetti con l’Università dell’Aquila
2
Il progetto assegnato
• Sviluppo e implementazione di tecniche ed ontologie per
Ricerche Enterprise
• Svolto in team:
1. Sviluppo del componente di ricerca in Solr
2. Implementazione di un editor di Thesaurus
3
Indice
• Apache Solr
• Architettura di Solr
• Principali funzionalità
• Inverted index
• Hierarchy Component
• Algoritmo
• Sviluppo in Solr
• Test
4
Apache Solr
5
• Applicazione Web
• Motore di ricerca full text
• Basato su Apache Lucene
▫ Libreria Java di indicizzazione e ricerca
• Open source
• REST API
• Client API
Solr: architettura
6
Panoramica delle funzionalità (1)
• Pagination
• Faceting
• Autosuggest
• Hit highlighting
• Geospatial Search
7
Panoramica delle funzionalità (2)
• Result grouping
• Flexing query support
• Importing rich document (Word, Pdf)
• Database integration
• Multilingual support
8
Inverted index (1)
9
Nessun risultato
Inverted index (2)
10
Inverted index (3)
11
Inverted index (4)
12
Inverted index (5)
13
new AND home
new OR home
“new home”
Chi usa Solr?
14
Hierarchy Component
• Clusterizzazione gerarchica dei documenti
• Input:
▫ N documenti
▫ Thesaurus
• Output:
▫ I documenti (N) raggruppati in cluster
▫ Cluster collegati semanticamente
• Vincolo di linearità
15
Algoritmi di clustering
16
Algoritmo sviluppato
17
Implementazione in Solr
• Hierarchy Component = Search Component
1. Aggiunta del componente alla configurazione
▫ solrconfig.xml
2. Creazione di un nuovo request handler
▫ /search
3. Implementazione di Hierarchy Component
▫ Classe Java: HierarchyComponent.java
▫ Librerie di Solr, API Solrj
18
Velocity Search UI
19
Hierachy in Velocity (1)
20
Hierachy in Velocity (2)
21
scienze sociali
Hierachy in Velocity (3)
22
scienze sociali -> scienze economiche
Test sulle performance (1)
23
Test sulle performance (2)
24
Conclusioni
• Studio approfondito di Apache Solr
• Componente di clusterizzazione gerarchica
▫ Hierarchy Component in Solr
• Vincolo di linearità
• Sviluppi futuri:
▫ Relazioni trasversali
▫ Relazioni di sinonimia
25
26
Grazie
per l’attenzione

More Related Content

Similar to Tesi4

Funziona! allora non toccarlo, ovvero l'analisi d'infrastruttura in esercizio.
Funziona! allora non toccarlo, ovvero l'analisi d'infrastruttura in esercizio.Funziona! allora non toccarlo, ovvero l'analisi d'infrastruttura in esercizio.
Funziona! allora non toccarlo, ovvero l'analisi d'infrastruttura in esercizio.
Giuliano Latini
 
Azure saturday pn 2018 ml
Azure saturday pn 2018 mlAzure saturday pn 2018 ml
Azure saturday pn 2018 ml
Marco Zamana
 
Utilizzo di tecnologie big data per addestramento di metamodelli matematici p...
Utilizzo di tecnologie big data per addestramento di metamodelli matematici p...Utilizzo di tecnologie big data per addestramento di metamodelli matematici p...
Utilizzo di tecnologie big data per addestramento di metamodelli matematici p...
DavideFegez
 
CDays15 - AZ08 - DocumentDB: il NoSql secondo Azure
CDays15 - AZ08 - DocumentDB: il NoSql secondo AzureCDays15 - AZ08 - DocumentDB: il NoSql secondo Azure
CDays15 - AZ08 - DocumentDB: il NoSql secondo Azure
Davide Benvegnù
 
VisualDDHub - final approach
VisualDDHub - final approachVisualDDHub - final approach
VisualDDHub - final approach
Martina Garofalo
 
Il caso CNR: la soluzione di Gestione Concorsi con Alfresco
Il caso CNR: la soluzione di Gestione Concorsi con AlfrescoIl caso CNR: la soluzione di Gestione Concorsi con Alfresco
Il caso CNR: la soluzione di Gestione Concorsi con Alfresco
Alfresco Software
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Intelligent Question Answering System nell'ambito del progetto di ricerca PIU...
Intelligent Question Answering System nell'ambito del progetto di ricerca PIU...Intelligent Question Answering System nell'ambito del progetto di ricerca PIU...
Intelligent Question Answering System nell'ambito del progetto di ricerca PIU...
Monica Daniele
 
A ciascuno il suo: archi, frecce e interfacce per servizi editoriali B2B e B2...
A ciascuno il suo: archi, frecce e interfacce per servizi editoriali B2B e B2...A ciascuno il suo: archi, frecce e interfacce per servizi editoriali B2B e B2...
A ciascuno il suo: archi, frecce e interfacce per servizi editoriali B2B e B2...
Architecta | Società Italiana di Architettura dell'Informazione
 
ANALYSIS OF METHODS FOR PRODUCT INNOVATION: CLASSIFICATION OF PATENTS AND SC...
ANALYSIS OF METHODS FOR PRODUCT INNOVATION:  CLASSIFICATION OF PATENTS AND SC...ANALYSIS OF METHODS FOR PRODUCT INNOVATION:  CLASSIFICATION OF PATENTS AND SC...
ANALYSIS OF METHODS FOR PRODUCT INNOVATION: CLASSIFICATION OF PATENTS AND SC...Roberto Nani
 
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Massimiliano Leone
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloud
Riccardo Zamana
 
The Hitchhiker's Guide to the Azure Galaxy
The Hitchhiker's Guide to the Azure GalaxyThe Hitchhiker's Guide to the Azure Galaxy
The Hitchhiker's Guide to the Azure Galaxy
Nicolò Carandini
 
Introduzione - Web design
Introduzione - Web designIntroduzione - Web design
Introduzione - Web design
gowow
 
Il progetto INNO: dal dato alla applicazione - Pierluigi Cau (CRS4)
Il progetto INNO: dal dato alla applicazione - Pierluigi Cau (CRS4)Il progetto INNO: dal dato alla applicazione - Pierluigi Cau (CRS4)
Il progetto INNO: dal dato alla applicazione - Pierluigi Cau (CRS4)
Sardegna Ricerche
 
Slide generazione automatica di siti con mappe geografiche
Slide   generazione automatica di siti con mappe geograficheSlide   generazione automatica di siti con mappe geografiche
Slide generazione automatica di siti con mappe geografiche
Martino Miani
 
Code Contracts and Generics: implementing a LINQ-enabled Repository
Code Contracts and Generics: implementing a LINQ-enabled RepositoryCode Contracts and Generics: implementing a LINQ-enabled Repository
Code Contracts and Generics: implementing a LINQ-enabled Repository
Andrea Saltarello
 
Presentazione bd2
Presentazione bd2Presentazione bd2
Presentazione bd2
Gino Farisano
 
WeWantWeb - WCF Data Services
WeWantWeb - WCF Data ServicesWeWantWeb - WCF Data Services
WeWantWeb - WCF Data Services
DomusDotNet
 
Il nuovo catalogo della rete URBS - La migrazione akoha
Il nuovo catalogo della rete URBS - La migrazione akohaIl nuovo catalogo della rete URBS - La migrazione akoha
Il nuovo catalogo della rete URBS - La migrazione akoha
Andrea Marchitelli
 

Similar to Tesi4 (20)

Funziona! allora non toccarlo, ovvero l'analisi d'infrastruttura in esercizio.
Funziona! allora non toccarlo, ovvero l'analisi d'infrastruttura in esercizio.Funziona! allora non toccarlo, ovvero l'analisi d'infrastruttura in esercizio.
Funziona! allora non toccarlo, ovvero l'analisi d'infrastruttura in esercizio.
 
Azure saturday pn 2018 ml
Azure saturday pn 2018 mlAzure saturday pn 2018 ml
Azure saturday pn 2018 ml
 
Utilizzo di tecnologie big data per addestramento di metamodelli matematici p...
Utilizzo di tecnologie big data per addestramento di metamodelli matematici p...Utilizzo di tecnologie big data per addestramento di metamodelli matematici p...
Utilizzo di tecnologie big data per addestramento di metamodelli matematici p...
 
CDays15 - AZ08 - DocumentDB: il NoSql secondo Azure
CDays15 - AZ08 - DocumentDB: il NoSql secondo AzureCDays15 - AZ08 - DocumentDB: il NoSql secondo Azure
CDays15 - AZ08 - DocumentDB: il NoSql secondo Azure
 
VisualDDHub - final approach
VisualDDHub - final approachVisualDDHub - final approach
VisualDDHub - final approach
 
Il caso CNR: la soluzione di Gestione Concorsi con Alfresco
Il caso CNR: la soluzione di Gestione Concorsi con AlfrescoIl caso CNR: la soluzione di Gestione Concorsi con Alfresco
Il caso CNR: la soluzione di Gestione Concorsi con Alfresco
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Intelligent Question Answering System nell'ambito del progetto di ricerca PIU...
Intelligent Question Answering System nell'ambito del progetto di ricerca PIU...Intelligent Question Answering System nell'ambito del progetto di ricerca PIU...
Intelligent Question Answering System nell'ambito del progetto di ricerca PIU...
 
A ciascuno il suo: archi, frecce e interfacce per servizi editoriali B2B e B2...
A ciascuno il suo: archi, frecce e interfacce per servizi editoriali B2B e B2...A ciascuno il suo: archi, frecce e interfacce per servizi editoriali B2B e B2...
A ciascuno il suo: archi, frecce e interfacce per servizi editoriali B2B e B2...
 
ANALYSIS OF METHODS FOR PRODUCT INNOVATION: CLASSIFICATION OF PATENTS AND SC...
ANALYSIS OF METHODS FOR PRODUCT INNOVATION:  CLASSIFICATION OF PATENTS AND SC...ANALYSIS OF METHODS FOR PRODUCT INNOVATION:  CLASSIFICATION OF PATENTS AND SC...
ANALYSIS OF METHODS FOR PRODUCT INNOVATION: CLASSIFICATION OF PATENTS AND SC...
 
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
Android Frameworks for Geolocalized Apps Development: Diane, Hermes, Polaris/...
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloud
 
The Hitchhiker's Guide to the Azure Galaxy
The Hitchhiker's Guide to the Azure GalaxyThe Hitchhiker's Guide to the Azure Galaxy
The Hitchhiker's Guide to the Azure Galaxy
 
Introduzione - Web design
Introduzione - Web designIntroduzione - Web design
Introduzione - Web design
 
Il progetto INNO: dal dato alla applicazione - Pierluigi Cau (CRS4)
Il progetto INNO: dal dato alla applicazione - Pierluigi Cau (CRS4)Il progetto INNO: dal dato alla applicazione - Pierluigi Cau (CRS4)
Il progetto INNO: dal dato alla applicazione - Pierluigi Cau (CRS4)
 
Slide generazione automatica di siti con mappe geografiche
Slide   generazione automatica di siti con mappe geograficheSlide   generazione automatica di siti con mappe geografiche
Slide generazione automatica di siti con mappe geografiche
 
Code Contracts and Generics: implementing a LINQ-enabled Repository
Code Contracts and Generics: implementing a LINQ-enabled RepositoryCode Contracts and Generics: implementing a LINQ-enabled Repository
Code Contracts and Generics: implementing a LINQ-enabled Repository
 
Presentazione bd2
Presentazione bd2Presentazione bd2
Presentazione bd2
 
WeWantWeb - WCF Data Services
WeWantWeb - WCF Data ServicesWeWantWeb - WCF Data Services
WeWantWeb - WCF Data Services
 
Il nuovo catalogo della rete URBS - La migrazione akoha
Il nuovo catalogo della rete URBS - La migrazione akohaIl nuovo catalogo della rete URBS - La migrazione akoha
Il nuovo catalogo della rete URBS - La migrazione akoha
 

Recently uploaded

Convegno SPEKTRA da A2A - 28 maggio 2024 | ORSENIGO Tiziano
Convegno SPEKTRA da A2A - 28 maggio 2024 | ORSENIGO TizianoConvegno SPEKTRA da A2A - 28 maggio 2024 | ORSENIGO Tiziano
Convegno SPEKTRA da A2A - 28 maggio 2024 | ORSENIGO Tiziano
Servizi a rete
 
Convegno SPEKTRA da A2A - 28 maggio 2024 | CARNI Marco
Convegno SPEKTRA da A2A - 28 maggio 2024 | CARNI MarcoConvegno SPEKTRA da A2A - 28 maggio 2024 | CARNI Marco
Convegno SPEKTRA da A2A - 28 maggio 2024 | CARNI Marco
Servizi a rete
 
Convegno SPEKTRA da A2A - 28 maggio 2024 | UBERTI FOPPA Bianca
Convegno SPEKTRA da A2A - 28 maggio 2024 | UBERTI FOPPA BiancaConvegno SPEKTRA da A2A - 28 maggio 2024 | UBERTI FOPPA Bianca
Convegno SPEKTRA da A2A - 28 maggio 2024 | UBERTI FOPPA Bianca
Servizi a rete
 
Convegno SPEKTRA da A2A - 28 maggio 2024 | RUGGIERI Alfredo
Convegno SPEKTRA da A2A - 28 maggio 2024 | RUGGIERI AlfredoConvegno SPEKTRA da A2A - 28 maggio 2024 | RUGGIERI Alfredo
Convegno SPEKTRA da A2A - 28 maggio 2024 | RUGGIERI Alfredo
Servizi a rete
 
Convegno SPEKTRA da A2A - 28 maggio 2024 | ALESIANO Yuri
Convegno SPEKTRA da A2A - 28 maggio 2024 | ALESIANO YuriConvegno SPEKTRA da A2A - 28 maggio 2024 | ALESIANO Yuri
Convegno SPEKTRA da A2A - 28 maggio 2024 | ALESIANO Yuri
Servizi a rete
 
Convegno SPEKTRA da A2A - 28 maggio 2024 | VEIRANA Francesco
Convegno SPEKTRA da A2A - 28 maggio 2024 | VEIRANA FrancescoConvegno SPEKTRA da A2A - 28 maggio 2024 | VEIRANA Francesco
Convegno SPEKTRA da A2A - 28 maggio 2024 | VEIRANA Francesco
Servizi a rete
 
Convegno SPEKTRA da A2A - 28 maggio 2024 | TROIANO Luigia
Convegno SPEKTRA da A2A - 28 maggio 2024 | TROIANO LuigiaConvegno SPEKTRA da A2A - 28 maggio 2024 | TROIANO Luigia
Convegno SPEKTRA da A2A - 28 maggio 2024 | TROIANO Luigia
Servizi a rete
 
Convegno SPEKTRA da A2A - 28 maggio 2024 | BERTELLA Alessio
Convegno SPEKTRA da A2A - 28 maggio 2024 | BERTELLA AlessioConvegno SPEKTRA da A2A - 28 maggio 2024 | BERTELLA Alessio
Convegno SPEKTRA da A2A - 28 maggio 2024 | BERTELLA Alessio
Servizi a rete
 
Convegno SPEKTRA da A2A - 28 maggio 2024 | NERELLI Andrea
Convegno SPEKTRA da A2A - 28 maggio 2024 | NERELLI AndreaConvegno SPEKTRA da A2A - 28 maggio 2024 | NERELLI Andrea
Convegno SPEKTRA da A2A - 28 maggio 2024 | NERELLI Andrea
Servizi a rete
 
onvegno SPEKTRA da A2A - 28 maggio 2024 | COLLA Simone
onvegno SPEKTRA da A2A - 28 maggio 2024 | COLLA Simoneonvegno SPEKTRA da A2A - 28 maggio 2024 | COLLA Simone
onvegno SPEKTRA da A2A - 28 maggio 2024 | COLLA Simone
Servizi a rete
 

Recently uploaded (10)

Convegno SPEKTRA da A2A - 28 maggio 2024 | ORSENIGO Tiziano
Convegno SPEKTRA da A2A - 28 maggio 2024 | ORSENIGO TizianoConvegno SPEKTRA da A2A - 28 maggio 2024 | ORSENIGO Tiziano
Convegno SPEKTRA da A2A - 28 maggio 2024 | ORSENIGO Tiziano
 
Convegno SPEKTRA da A2A - 28 maggio 2024 | CARNI Marco
Convegno SPEKTRA da A2A - 28 maggio 2024 | CARNI MarcoConvegno SPEKTRA da A2A - 28 maggio 2024 | CARNI Marco
Convegno SPEKTRA da A2A - 28 maggio 2024 | CARNI Marco
 
Convegno SPEKTRA da A2A - 28 maggio 2024 | UBERTI FOPPA Bianca
Convegno SPEKTRA da A2A - 28 maggio 2024 | UBERTI FOPPA BiancaConvegno SPEKTRA da A2A - 28 maggio 2024 | UBERTI FOPPA Bianca
Convegno SPEKTRA da A2A - 28 maggio 2024 | UBERTI FOPPA Bianca
 
Convegno SPEKTRA da A2A - 28 maggio 2024 | RUGGIERI Alfredo
Convegno SPEKTRA da A2A - 28 maggio 2024 | RUGGIERI AlfredoConvegno SPEKTRA da A2A - 28 maggio 2024 | RUGGIERI Alfredo
Convegno SPEKTRA da A2A - 28 maggio 2024 | RUGGIERI Alfredo
 
Convegno SPEKTRA da A2A - 28 maggio 2024 | ALESIANO Yuri
Convegno SPEKTRA da A2A - 28 maggio 2024 | ALESIANO YuriConvegno SPEKTRA da A2A - 28 maggio 2024 | ALESIANO Yuri
Convegno SPEKTRA da A2A - 28 maggio 2024 | ALESIANO Yuri
 
Convegno SPEKTRA da A2A - 28 maggio 2024 | VEIRANA Francesco
Convegno SPEKTRA da A2A - 28 maggio 2024 | VEIRANA FrancescoConvegno SPEKTRA da A2A - 28 maggio 2024 | VEIRANA Francesco
Convegno SPEKTRA da A2A - 28 maggio 2024 | VEIRANA Francesco
 
Convegno SPEKTRA da A2A - 28 maggio 2024 | TROIANO Luigia
Convegno SPEKTRA da A2A - 28 maggio 2024 | TROIANO LuigiaConvegno SPEKTRA da A2A - 28 maggio 2024 | TROIANO Luigia
Convegno SPEKTRA da A2A - 28 maggio 2024 | TROIANO Luigia
 
Convegno SPEKTRA da A2A - 28 maggio 2024 | BERTELLA Alessio
Convegno SPEKTRA da A2A - 28 maggio 2024 | BERTELLA AlessioConvegno SPEKTRA da A2A - 28 maggio 2024 | BERTELLA Alessio
Convegno SPEKTRA da A2A - 28 maggio 2024 | BERTELLA Alessio
 
Convegno SPEKTRA da A2A - 28 maggio 2024 | NERELLI Andrea
Convegno SPEKTRA da A2A - 28 maggio 2024 | NERELLI AndreaConvegno SPEKTRA da A2A - 28 maggio 2024 | NERELLI Andrea
Convegno SPEKTRA da A2A - 28 maggio 2024 | NERELLI Andrea
 
onvegno SPEKTRA da A2A - 28 maggio 2024 | COLLA Simone
onvegno SPEKTRA da A2A - 28 maggio 2024 | COLLA Simoneonvegno SPEKTRA da A2A - 28 maggio 2024 | COLLA Simone
onvegno SPEKTRA da A2A - 28 maggio 2024 | COLLA Simone
 

Tesi4

Editor's Notes

  1. Buongiorno a tutti, sono Enrico Santoro e sto per presentarvi il mio lavoro di tesi riguardante lo sviluppo di un componente di ricerca all’interno della piattaforma Apache Solr.
  2. Questo lavoro di tesi è stato svolto in azienda; l’azienda in questione è la KDM la quale ha sede a Roma ed opera nel settore dell’Information and Communication Technology. Essa offre diverse soluzioni e servizi ai propri clienti, nell’ambito del Knowledge Management, della gestione documentale come la dematerializzazione dei processi e dei procedimenti, soluzioni gestionali per le aziende e altro ancora. Dall’anno corrente la KDM ha intrapreso una collaborazione con la nostra facoltà, proponendo diversi progetti agli studenti.
  3. Ed è proprio in uno di questi progetti che si colloca il mio lavoro di tesi. Il progetto in questione riguarda lo sviluppo di una tecnica di ricerca basata sull’utilizzo di ontologie, e l’implementazione di uno strumento per la gestione delle ontologie stesse. Questo progetto è stato assegnato ad un team di due persone; io mi sono occupato dello sviluppo vero e proprio del componente di ricerca, mentre il mio collega Antonio Delli Carpini si è occupato della gestione dei Thesaurus utilizzati dal componente di ricerca stesso; e dei quali ce ne parlerà succesivamente.
  4. Dunque nel corso di questa presentazione vi parlerò prima di tutto di Apache Solr, poichè il grosso del lavoro è riguardato proprio lo studio di questa potente piattaforma di ricerca. Vi mostrerò quella che è la suaarchitettura base, le sue principali funzionalità e peculiarità; successivamente vedremo quello che è il suo principale punto di forza e ciò l’utilizzo di un indice inverso nelle operazioni di ricerca. Poi passerò ad illustrarvi il componente di ricerca sviluppato chiamato Hierarchy Component, mostrandovi l’algoritmo di funzionamento, come è stato sviluppato in Solr ed infine vedremo un esempio d’uso ed alcuni test sulle performance.
  5. Solr è una piattaforma di ricerca fornita come applicazione web, che rappresenta un motore di ricerca full text basato su una libreria scritta interamente in Java per l’indicizzazione e la ricerca di documenti, chiamata Apache Lucene. Quindi Lucene è una libreria di ricerca, mentre Solr è un applicazione web che utilizza la libreria Lucene. Caratteristica fondamentale è che tale piattaforma è open source. Inoltre essendo scritta interamente in Java, Solr ha il vantaggio di essere utilizzabile su qualsiasi sistema operativo. In figura vediamo un semplice utilizzo di Solr, dove un’altra web app interroga l’indice di Lucene e Solr fornisce una risposta. Ovviamente sull’indice vengono effettuate anche operazioni di aggiornamento e indicizzazione dei documenti. Solr fornisce inoltre delle rest api per richiede I propri servizi attraverso il protocollo http e restituendo la risposta in JSON o XML. Spesso gli sviluppatori preferiscono però accedere al servizio di Solr mediante delle librerie Client. A questo scopo Solr è fornito di molte librerie Client in vari linguaggi. Ad esempio per il Java sono disponibili le API Solrj che sono state utilizzate nello sviluppo di questo lavoro.
  6. Esploriamo meglio quella che è l’architettura di Solr… Solr può essere implementato in un qualsiasi servlet container, come ad esempio Tomcat o Jetty. Quando si effettua il download di Solr esso è preconfigurato all’utilizzo con Jetty. Solr supporta l'esecuzione di piu core, e quindi di piu indici, nello stesso ambiente Java, garantendo dunque una elevata flessibilità di utilizzo. Su ogni core possono essere effettuate operazioni di querying e updating sull’indice. Per ogni indice sono presenti due file di configurazione molto importanti che sono lo schema.xml e solrconfig.xml. Lo schema contiene tutti I dettagli riguardanti la struttura dei documenti (I campi che contengono e I loro tipi) e viene utilizzato sia durante l’indicizzazione degli stessi che durante la fase di interrogazione. Invece il file solrconfig.xml contiene I la maggior parte dei parametri per configurare Solr stesso.
  7. Per quanto riguarda le principali funzionalità di Solr, esse innanzitutto sono percepite in due differenti categorie: quelle riguardanti la User Experience, e quelle inerenti al data modeling. Per quanto concerne la user experience, Solr è dotato di importanti funzionalità che consentono di fornire una soluzione di ricerca che facile da utilizzare, intuitiva e performante. Tra i principali componenti di questa categoria troviamo: - pagination: utile per servire il risultato delle richieste distribuito su diverse pagine; - faceting: fornisce agli utenti gli strumenti per affinare i criteri di ricerca e scoprire ulteriori informazioni categorizzando i risultati della ricerca in sottogruppi mediante l’utilizzo delle faccette; autosuggest: permette agli utenti di vedere una lista di termini e frasi suggerite sulla base di documenti presenti nell'indice; Spell-checker: offre supporto alla correzione ortografica ed è sempre più utile nell'era dei dispositivi mobili e persone in movimento; Hit highlighting: molto utile durante la ricerca di documenti che hanno una notevole quantità di testo, opichè è possibile andare ad evidenziare sezioni specifiche di ogni documento per migliorare la leggibilità; - Geospatial Search: Solr è dotato del supporto per l'indicizzazione dei valori di longitudine e latitudine e restituisce i documenti per distanza geografica
  8. Per quanto riguarda invece le funzionalita di data-modeling abbiamo: - Result grouping: Solr consente di trattare piu documenti come un gruppo sulla base di alcune proprieta comuni condivise da tutti i documenti del gruppo; il classico esempio è quello delle email dove tutte le mail di risposta ad un messaggio originale possono essere raggruppate. Flexing query support: Solr offre una serie di funzionalita per le interrogazioni tra cui i classici operatori logici AND, OR e NOT; intervalli per date e numeri, utilizzare una logica fuzzy, espressioni regolari e altro ancora… Document clustering: permette di identificare gruppi di documenti che sono simili sulla base di alcune condizioni presenti in ciascun documento; - Importing rich document: Solr si integra con il progetto Apache Tika che supporta i formati di documento piu diffusi; Database integration: permette di integrare dati presenti in un database relazionale; Multilingual support: ovviamente Solr supporta tantissime lingue ed offre un rilevatore di lingua integrato
  9. Una importante caratteristica di Solr è data dall’utilizzo del cosiddetto indice inverso. Come detto precedentemente Solr fa uso della libreria di ricerca Apache Lucene; e questa libreria fa proprio uso di questa tecnica. Quindi Solr indirettamente fa uso di questa tecnica di ricerca. Vediamola attraverso un esempio, nel quale consideriamo dapprima l’utilizzo di database relazionali per capirne meglio le differenze: supponiamo di avere una lista di titoli di alcuni libri; e vogliamo effettuare una ricerca per trovare libri che riguardano l’acquisto di nuove case. Effettuando una query in questo modo non otteremo alcun risultato poichè nessun libro ha come titolo “buying a new home”.
  10. Quello che si può pensare di fare allora è di andare a ricercare le singole parole all’interno del testo; in questo caso ad esempio vogliamo che tutte e tre le parole siano presenti nel titolo del libro. In questo modo otterremo un unico risultato e verrano scartati molti libri che invece sono rilevanti.
  11. Allo stesso modo possiamo invece volere che almeno una delle tre parole sia presente nel titolo del libro. In questo caso otteniamo molti più risultati, alcuni dei quali però risultano essere irrilevanti ai fini della ricerca. Questo perché basta che sia presente la lettera “a” all’interno di un titolo ed esso verrà restituito. Dunque questa è una principale problematica che riguarda le basi di dati relazionali; inoltre c’è da dire che queste tipologie di query diventeranno sempre più lente man mano che la dimensione del catalogo dei libri crescerà, perche la query deve eseguire la scansione attraverso il titolo di ogni libro per trovare delle corrispondenze parziali invece.
  12. L'indice inverso va ad invertire questo modello effettuando l’analisi del testo e mappando ogni parola su tutti i documenti in cui essa appare. L’analisi del testo può essere fatta in diversi modi, utilizzando particolari tokenizzazioni e filtri: ad esempio qui è stata effettuata una whitespace tokenization, cioè per ogni spazio bianco viene individuato un termine, e successivamente un filtro per portare I termini tutti in lowercase.
  13. Quindi se supponiamo di voler interrogare l’indice alla ricerca dei termini “new” e “home”, una volta che l'elenco dei documenti corrispondenti ad ogni termini è stato trovato, Lucene eseguirà le operazioni di set per arrivare ad un adeguato set di risultati finale che corrisponde alla query. A questo punto è necessario specificare come vogliamo interrogare l'indice: - Ricerca di due differenti termini, “new"e “home", richiedendo il match di entrambi, attraverso l’operatore AND; ed in questo caso otteniamo l’intersezione tra I due insiemi. Ricerca di due differenti termini, “new"e “home", richiedendo il match di un solo termine, attraverso l’operatore OR; ed in questo caso otteniamo l’unione tra I due insiemi. - Ricerca della frase esatta “new home“; in questo caso ogni termine della frase viene ancora ricercato nell'indice individualmente, viene eseguita poi l’operazione di AND poichè entrambi I termini devono essere presenti nella frase, ed infine si fa uso di una caratteristica facoltativa chiamata term position, che ci dice la posizione relativa dei termini all'interno del documento.
  14. Grazie all’utilizzo dell’indice inverso di Lucene, Solr risulta essere altamente performante nelle operazioni di ricerca, e proprio per questo motivo esso è utilizzato in tantissimi siti web di caratura mondiale; come ad esempio… Questo per far capire proprio quelle che sono le potenzialità di questo strumento.
  15. Una volta studiata a fondo la piattaforma di ricerca, ed abbiamo visto molte delle sue funzionalità e dei suoi punti di forza, si è passati allo sviluppo del componente di ricerca commissionato dall’azienda KDM, chiamato Hierarchy Component. Innanzitutto qual’è lo scopo di questo componente? Esso deve produrre una clusterizzazione gerarchica dei documenti a seguito di una ricerca effettuata dal’utente. Cioè dati in input un certo numero di documenti indicizzati in Solr e ottenuti da una ricerca effettuata dall’utente, e un Thesaurus (che rappresenta un insieme di termini strutturati e collegati semanticamente e della cui gestione, organizzazione e indicizzazione ce ne parlerà dopo il mio collega), quello che questo componente deve produrre in output, è l’insieme dei documenti raggruppati in cluster, ogni cluster rappresenta un certo dominio semantico e in esso saranno presenti tutti I documenti di quel dominio, ed ogni cluster prodotto che venga successivamente gerarchizzato; cioè che vengano fatti dei collegamenti tra I vari cluster in modo da creare una gerarchia tra loro. Chi è che ci fornisce questa gerarchia? Il Thesaurus in uso.
  16. A questo punto una domanda sorge spontanea. Una piattaforma di ricerca efficace come Solr e piena di funzionalità, non ha questo componente già sviluppato? Ebbene nel suo pacchetto di funzionalita fornisce la possibilita di raggruppare dei documenti correlati mediante un componente di Clustering (di cui vi ho già accenato precedentemente); ma per quanto riguarda la clusterizzazione gerarchica non è fornito alcun algoritmo. Per precisare Solr fa uso di una piattaforma open source di nome Carrot la quale implementa 3 diversi algoritmi: abbiamo Lingo e STC che sono gratuiti ma non forniscono hierarchical clustering; poi c’è il Lingo 3G che fornisce questa funzionalità ma è a pagamento; se si acquista questo algoritmo è possibile integrarlo in Solr, ma ovviamente essendo open source non è presente nel pacchetto base. Dunque utilizzando l’algortimo di clustering di default presente in solr, e cioè Lingo, il primo step della creazione dei cluster risulta già effettuato. Ciò che manca è di andare a effettuare la gerarchizzazione di questi cluster.
  17. Vediamo intuitivamente come è stato realizzato ciò attraverso l’utilizzo dei thesaurus. L’algoritmo sviluppato si basa su diversi step: Al primo step si effettua una ricerca sul corpus dei documenti utilizzando il componente di clustering. L'algoritmo di clustering, cioè Lingo, fornira in output una lista di cluster che chiamiamo Lc; ogni cluster appartenente a tale lista risulterà etichettato mediante una label dall'algoritmo di clustering e conterrà un certo numero di documenti (tra quelli restituiti in output dalla ricerca effettuata). Le label rappresentative dei cluster vengono successivamente sottoposte ad un processo di stemming (riduzione della forma flessa di una parola alla sua forma radice). In tale fase inoltre la lista Lt verrà generata in maniera ordinata alfabeticamente. Si ricercano i termini presenti nella lista Lt all'interno del thesaurus indicizzato e i termini trovati costituiranno la lista Lo come output della ricerca. Tale lista sarà ordinata alfabeticamente. Ovviamente può accadere che non tutti i termini vengano trovati all'interno dell'ontologia, e in tal caso la cardinalità di Lo sarà minore di quella di Lt. Cosa importante è che il thesaurus è presente su un indice di Solr differente da quello contenente il corpus documentale; questo per mantenere separati i due insiemi di documenti: il primo costituito da documenti che sono oggetto della ricerca e il secondo costituito da documenti che rappresentano il thesaurus in uso. A questo punto si effettua un confronto tra le due liste ordinate Lt ed Lo. Tale confronto permetterà dunque di conoscere quali termini sono stati trovati nel thesaurus e quali invece non sono stati trovati. E' fondamentale che le due liste siano ordinate alfabeticamente per fare in modo che la complessità computazionale del confronto sia lineare ( O(n) ). Una volta effettuato il confronto sarà possibile associare ad ogni termine della lista risultante, la lista di documenti associati ad ogni cluster. In questo modo si legano i documenti ottenuti dalla ricerca, ai termini presenti nel Thesaurus. Poiché ogni termine presente nel Thesaurus ha una propria gerarchia (come ci verrà mostrato successivamente), i documenti risulteranno posizionati direttamente in essa. Ovviamente i termini che non sono stati trovati nel thesaurus non apparterranno a nessuna gerarchia, e quindi risulteranno semplicemente raggruppati in cluster ma non gerarchizzati. Attraverso questi step dunque si ottiene la clusterizzazione gerarchia.
  18. Adesso vediamo invece come tale algoritmo è stato sviluppato in Solr. Solr offre un semplice meccanismo di implementazione di nuovi componenti, chiamati Search Component. Il compito di un Search Component è quello di aggiungere informazione alla risposta di Solr quando si effettua una ricerca: nel nostro caso l'informazione aggiunta riguarda proprio la clusterizzazione gerarchica. Per creare un nuovo search component bisogna prima di tutto informare Solr del nuovo componente andandolo ad aggiungere al file di configurazione solrconfig.xml. Successivamente bisogna creare un nuovo request handler che si occuperà di richiamare il nostro componente. Cioè quando facciamo una richiesta a Solr e vogliamo che venga utilizzato il nostro componente, allora tale richiesta bisogna farla ad un determinato request handler: il quale è stato chiamato search, ed è raggiungibile mediante richiesta http. Infine bisogna scrivere il comportamento di questo componente, cioè tutti I passi dell’algortimo che abbiamo visto precedentemente, e ciò è stato fatto creando una classe Java la quale al suo interno fa uso delle librerie di Solr ed anche delle API SolrJ per effettuare richieste da client a Solr; ad esempio poichè dobbiamo interrogare l’indice in cui è presente il Thesaurus.
  19. Una volta che il componente è stato sviluppato, si è andati ad integrarlo all’interno di una semplice interfaccia utente di ricerca fornita da Solr, che è chiamata Velocity o anche Soliritas; essa manifesta diverse utili caratteristiche come la ricerca, il faceting, l'autocompletamento, highlighting e la ricerca spaziale. Se attivo, è possibile visualizzare anche il clustering in azione.
  20. Dunque si è andati ad inserire il nostro componente di ricerca Hierarchy all’interno di questa interfaccia utente per rendere navigabile l’albero dei risultati restituito dal componente stesso. Nell’esempio mostrato è stata eseguita una ricerca libera su Solr, cioè senza parametri, ed è possibile notare che delle 11 etichette mostrate nella sezione Hierarchy, 10 sono relative a label di cluster che hanno trovato una corrispondenza nel Thesaurus, mentre l'etichetta Non Match contiene tutte le label che non sono state trovate. Per navigare l’albero basta dunque cliccare su una qualsiasi delle etichette, se ad esempio cliccliamo su “scienze sociali”…
  21. vedremo solamente il suo contenuto. In questo caso è presente una ulteriore etichetta “scienze economiche”. Cliccando su questa nuova etichetta scendiamo ancora di livello.
  22. In questo esempio sotto scienze economiche sono presenti direttamente I documenti. Questo vuol dire che scienze economiche è la label di un cluster generato da Lingo, e che è stata trovata all’interno del Thesaurus. Tale termine nel thesaurus risulta figlio del termine scienze sociali. E da qui nasce appunto la gerarchizzazione dei cluster.
  23. Olte a garantire il corretto funzionamento del componente, un altro aspetto importante riguarda il tempo di esecuzione poichè quando si parla di ricerca I tempi di risposta del sistema sono fondamentali affinchè l’utente risulti soddisfatto. Sono stati eseguiti dunque dei test sul componente effettuando una serie di query. In questo primo grafico abbiamo sull’asse delle X il numero di documenti restituiti dalla query; ed è dunque facile notare come all’aumentare dei documenti il numero di cluster prodotti sale, e a sua volta aumenta anche il numero di cluster trovati all’interno del Thesaurus (il test è stato fatto con un Thesaurus fisso). E questo conferma era ciò che ci si attendeva e in un certo senso conferma il corretto funzionamento.
  24. Ma quello che ci interessa maggiormente è il tempo di esecuzione di queste query di ricerca. Osserviamo che all’aumentare dei documenti, e dunque dei cluster prodotti, il tempo di esecuzione sale. La cosa importante è che questa crescita sia lineare. E osservando dalla figura….
  25. In conclusione, è stato fatto uno studio approfondito della piattaforma di ricerca Apache Solr e si sono messe in mostra quelle che sono le sue principali caratteristiche, abbiamo visto come è stato realizzato il componente di clusterizzazione gerarchica in Solr commissionato dall’azienda KDM; ed infine abbiamo visto come il vincolo di linearità di tale componente sia stato rispettato. In futuro sono già stati programati alcuni step per affinare il comportamento di Hierarchy Component: considerando non sono relazioni gerarchiche padre figlio tra gli elementi di un Thesaurus ma anche relazioni trasversali che trasformeranno la struttura da albero a grafo; ed infine includendo anche relazioni di sinonimia tra diversi termini in maniera tale che il componente automaticamente raggruppi risultati che fanno parte di cluster sinonimi tra loro.