• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Drupal + Apache SOLR
 

Drupal + Apache SOLR

on

  • 3,992 views

 

Statistics

Views

Total Views
3,992
Views on SlideShare
3,900
Embed Views
92

Actions

Likes
2
Downloads
80
Comments
0

4 Embeds 92

http://claudio.cicali.name 34
http://cocoate.com 33
http://www.slideshare.net 16
http://portfolio.rootiers.com 9

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Drupal + Apache SOLR Drupal + Apache SOLR Presentation Transcript

    • Apache SOLR + Drupal Claudio Cicali Claudio Cicali (vedi ultima slide)
    • Drupal + Apache SOLR – Claudio Cicali Un paio d'anni fa, un nostro cliente...
    • Drupal + Apache SOLR – Claudio Cicali
        • Documentale con circa 100.000 documenti iniziali, con ipotesi di arrivare fino al milione .
        • Necessità di ri-pubblicazione su siti “remoti”, Drupal o no
        • Sistema di ricerca sofisticato e – ovviamente - veloce
      Il progetto
    • Drupal + Apache SOLR – Claudio Cicali Nasceva «Mittwoch»
    • Drupal + Apache SOLR – Claudio Cicali OK, e la ricerca? Il sistema di ricerca fulltext core di Drupal è stato abbandonato (quasi) subito In realtà ci abbiamo anche provato, ma...
        • Indicizzazione lenta e non scalabile in maniera lineare
        • Tabelle di servizio alla ricerca nello stesso DB dei documenti
        • Indicizzazione contenuti in puro PHP
        • Impatta direttamente (e in maniera poco predicibile) le prestazioni del cronjob
        • Non delegabile su altri server
        • Interfaccia utente non eccezionale per la ricerca avanzata
        • Modulo esterno per la ricerca a faccette (poco scalabile esso stesso)
    • Drupal + Apache SOLR – Claudio Cicali Here comes... Solr is the popular, blazing fast open source enterprise search platform from the Apache Lucene project (da http://lucene.apache.org/solr/intro) (a onor del vero sono stati condotti anche altri esperimenti...)
    • Drupal + Apache SOLR – Claudio Cicali Troppo potenza! Per quello che fa e per come lo fa, non è semplicissimo da domare Né è troppo facile capire cosa possa fare per me Né è facile capire quale sia il modo migliore di fare una certa cosa Se queste parole vi fanno venire in mente Drupal ho ottenuto il risultato sperato ;) Questo è sicuramente il punto più arduo da superare; per tutto il resto c'è il manuale
    • Drupal + Apache SOLR – Claudio Cicali In breve... SOLR è un sistema (server) al quale tu dai un set di documenti e successivamente richiedi quelli che soddisfano certe condizioni /parametri Dunque esiste:
        • un modo per DARE informazioni
        • un modo per RICHIEDERE informazioni
        • un modo per definire una struttura sulla quale imporre delle condizioni
    • Drupal + Apache SOLR – Claudio Cicali «Product Highlights» Vale la pena cercare di capire come funziona?
        • SOLR (Lucene) è allo stato dell'arte della ricerca fulltext, sia come funzionalità che come query syntax (con dei limiti...)
        • Ottime prestazioni ( caching out-of-the-box)
        • Scalabile all'infinito perché viene gestita la replicazione degli indici
        • Si appoggia su tecnologie robuste e enterprise grade da anni (Lucene, Tomcat, Java)
        • Supporto alla faceted search (ricerca a faccette)
      continua...
    • Drupal + Apache SOLR – Claudio Cicali «Product Highlights» Vale la pena cercare di capire come funziona?
        • Gestione stemming ( did you mean...? ), sinonimi , more like this
        • Estensibile (vuoi che la risposta alle ricerche sia in CSV?)
        • Agnostico sul tipo di documento (nodi Drupal o un catalogo di parti meccaniche). La ricerca è sui campi, non su dei blob
        • Query time field & document boosting (no reindex)
        • Highlight e snippet
        • Gli indici contengono i dati serializzati (query del tipo: “cerca FORD nel TITLE e ritornami BODY, DATE e AUTHOR”)
    • Drupal + Apache SOLR – Claudio Cicali Consigliato! In pratica permette di rispondere sempre “Sì” alle richieste che riguardano un sistema di ricerca. Se (gran) parte del valore della nostra applicazione o della nostra azienda sta nel sistema di ricerca, credo sia praticamente obbligatorio capire in cosa SOLR possa aiutarci. Se poi l' interfaccia con Drupal è già pronta, tanto meglio ;)
    • Drupal + Apache SOLR – Claudio Cicali Zooming In... Apache SOLR Server La nostra applicazione
    • Drupal + Apache SOLR – Claudio Cicali Zooming in... Apache SOLR Server HTTP POST/GET La nostra applicazione DB INDEX
    • Drupal + Apache SOLR – Claudio Cicali Zooming in... HTTP POST/GET DARE e RICHIEDERE STRUTTURA SOLR Server La nostra applicazione DB INDEX schema.xml solrconfig.xml
    • Drupal + Apache SOLR – Claudio Cicali La struttura dei dati Ogni documento che viene spedito a SOLR non è un blob informe di dati ma è invece composto da CAMPI, tanti quanti se ne ritengano necessari. Questi campi vengono definiti in fase di progettazione del nostro indice. È ben presente il concetto di tipo di dato (ed è possibile addirittura definirne di nuovi)
    • Drupal + Apache SOLR – Claudio Cicali La struttura dei dati SOLR necessita di una definizione esplicita della struttura dei documenti che gli diamo in pasto. Questa struttura viene definita tramite il file SCHEMA.XML ... < fieldType name=&quot;integer&quot; class=&quot;solr.IntField&quot;/> <fieldType name=&quot;long&quot; class=&quot;solr.LongField&quot;/> <fieldType name=&quot;float&quot; class=&quot;solr.FloatField&quot;/> ... < field name=&quot;id&quot; type=&quot;string&quot; indexed =&quot;true&quot; stored =&quot;true&quot; required =&quot;true&quot; /> <field name=&quot;body&quot; type=&quot;text&quot; indexed=&quot;true&quot; stored=&quot;true&quot;/> <field name=&quot;teaser&quot; type=&quot;text&quot; indexed=&quot;false&quot; stored=&quot;true&quot;/> <field name=&quot;type&quot; type=&quot;string&quot; indexed=&quot;true&quot; stored=&quot;true&quot;/> <field name=&quot;type_name&quot; type=&quot;string&quot; indexed=&quot;true&quot; stored=&quot;true&quot;/> <field name=&quot;path&quot; type=&quot;string&quot; indexed=&quot;true&quot; stored=&quot;true&quot;/> ... <uniqueKey>id</uniqueKey> <defaultSearchField>body</defaultSearchField> ...
    • La struttura dei dati I campi sono analizzati/filtrati sia in ingresso (index time) che in uscita (query time) [...] <fieldType name=&quot;text&quot; class=&quot;solr.TextField&quot;> <analyzer type=&quot;index&quot;> <charFilter class=&quot;solr.MappingCharFilterFactory&quot; mapping=&quot;mapping-ISOLatin1Accent.txt&quot;/> <tokenizer class=&quot;solr.WhitespaceTokenizerFactory&quot;/> <filter class=&quot;solr.SynonymFilterFactory&quot; synonyms=&quot;index_synonyms.txt&quot; ignoreCase=&quot;true&quot; expand=&quot;false&quot;/> <filter class=&quot;solr.StopFilterFactory&quot; ignoreCase=&quot;true&quot; words=&quot;stopwords.txt&quot; /> <filter class=&quot;solr.LowerCaseFilterFactory&quot;/> <filter class=&quot;solr.SnowballPorterFilterFactory&quot; language=&quot;English&quot; protected=&quot;protwords.txt&quot;/> <filter class=&quot;solr.RemoveDuplicatesTokenFilterFactory&quot;/> </analyzer> <analyzer type=&quot;query&quot;> <charFilter class=&quot;solr.MappingCharFilterFactory&quot; mapping=&quot;mapping-ISOLatin1Accent.txt&quot;/> <tokenizer class=&quot;solr.WhitespaceTokenizerFactory&quot;/> <filter class=&quot;solr.SynonymFilterFactory&quot; synonyms=&quot;synonyms.txt&quot; ignoreCase=&quot;true&quot; expand=&quot;true&quot;/> <filter class=&quot;solr.StopFilterFactory&quot; ignoreCase=&quot;true&quot; words=&quot;stopwords.txt&quot; /> <filter class=&quot;solr.LowerCaseFilterFactory&quot;/> <filter class=&quot;solr.SnowballPorterFilterFactory&quot; language=&quot;English&quot; protected=&quot;protwords.txt&quot;/> <filter class=&quot;solr.RemoveDuplicatesTokenFilterFactory&quot;/> </analyzer> </fieldType> [...] Drupal + Apache SOLR – Claudio Cicali
    • Drupal + Apache SOLR – Claudio Cicali Tutto molto bello, ma... Sebbene la definizione dello SCHEMA.XML rappresenti la parte più complessa e caratteristica della configurazione di un server SOLR, questo lavoro per quanto riguarda l'integrazione con Drupal è già fatto . Il modulo che integra Drupal con SOLR, infatti, provvede anche uno SCHEMA.XML pronto all'uso (e anche un solrconfig.xml).
    • Drupal + Apache SOLR – Claudio Cicali Mettiamolo in moto... Versione corrente, SOLR 1.4, 10 novembre 2009 SOLR è una web application Java e per funzionare ha dunque bisogno di un servlet container Appena scaricato SOLR è comunque pronto all'uso: insieme a lui viene distribuito Jetty Per provarlo non è dunque necessario essere degli esperti J2EE In produzione è caldamente consigliato l'utilizzo di Tomcat
    • Drupal + Apache SOLR – Claudio Cicali Una volta partito SOLR attiva due listener HTTP . Uno per le richieste applicative (ricerca e aggiornamento indici) e uno che fornisce una (orribile) interfaccia di amministrazione
    • Drupal + Apache SOLR – Claudio Cicali Interfaccia di “ispezione”
    • Drupal + Apache SOLR – Claudio Cicali Interfaccia di “ispezione” SOLR “full interface”
    • Risposta XML Drupal + Apache SOLR – Claudio Cicali
    • Drupal + Apache SOLR – Claudio Cicali Sommario dei componenti
    • Drupal + Apache SOLR – Claudio Cicali Ricapitolando Cosa occorre fare, in concreto, per usare un sistema «SOLR powered»?
        • Studiare la documentazione (o il libro)
        • Creare un SCHEMA.XML che mappi la struttura dei nostri documenti
        • Interfacciare SOLR alla nostra applicazione
        • Dare in pasto a SOLR tutti i nostri documenti preesistenti
        • Tuning
    • Drupal + Apache SOLR – Claudio Cicali Chi ben comincia... Per Drupal il più è già stato fatto!
        • Studiare la documentazione (o il libro)
        • Creare un SCHEMA.XML che mappi la struttura dei nostri documenti
        • Interfacciare SOLR alla nostra applicazione
        • Dare in pasto a SOLR tutti i nostri documenti preesistenti
        • Tuning
    • Drupal + Apache SOLR – Claudio Cicali apachesolr.module Una leeeeeeeeeeeeeeeenta gestazione... e ancora siamo alla RC3 Robert Douglass et al.
    • Drupal + Apache SOLR – Claudio Cicali apachesolr.module Si installa come un normale modulo, ma in più:
        • si devono copiare i file SCHEMA.XML e SOLRCONFIG.XML nel posto giusto
        • Libreria “standard” PHP per il protocollo applicativo verso SOLR:
      SolrPhpClient, http://code.google.com/p/solr-php-client/ Alcune modifiche allo SCHEMA.XML necessitano la reindicizzazione di tutti i documenti. (eventualmente, aggiungere il file per le stopword italiane) Finché il modulo non è passato in versione RC questo è successo diverse volte :(
    • Drupal + Apache SOLR – Claudio Cicali Integrazione, in due parole Tabella di sincronizzazione, apachesolr_search_node Comunicazione verso SOLR: INSERT asincrono (delegato al cron) DELETE e UPDATE sincrono (in tempo reale, via nodeapi) Esposizione di hook per la modifica dei contenuti; es: apachesolr_node_exclude
    • Drupal + Apache SOLR – Claudio Cicali DEMO
    • Drupal + Apache SOLR – Claudio Cicali search.module Disabilitare il cron per la ricerca “core”
    • Drupal + Apache SOLR – Claudio Cicali Titolo
    • Drupal + Apache SOLR – Claudio Cicali Stato dell'indicizzazione
    • Drupal + Apache SOLR – Claudio Cicali Faceted search
    • Drupal + Apache SOLR – Claudio Cicali Document boosting, AKA “bias”
    • Drupal + Apache SOLR – Claudio Cicali
    • Drupal + Apache SOLR – Claudio Cicali Field boosting
    • Drupal + Apache SOLR – Claudio Cicali Inoltre... Dalla distribuzione standard del modulo si ha già l'integrazione con OG , NODEACCESS , IMAGE
    • Drupal + Apache SOLR – Claudio Cicali apachesolr_attachment.module Ricerca nei file allegati Usa un altro progetto Apache: TIKA http://lucene.apache.org/tika/ «Apache Tika is a toolkit for detecting and extracting metadata and structured text content from various documents using existing parser libraries»
    • Drupal + Apache SOLR – Claudio Cicali Una delle novità di Views 3, è che per una view permette di scegliere il backend che fornisce i dati alla stessa. L'integrazione con apachesolr permette di scegliere SOLR come backend diretto. Apache SOLR + Views 3
    • Drupal + Apache SOLR – Claudio Cicali Puntatori Modulo Drupal : http://drupal.org/project/ apachesolr SOLR : http://lucene.apache.org/ solr TIKA : http://lucene.apache.org/ tika NUTCH : http://lucene.apache.org/nutch/ Presentazione Video di R. Douglass http://bit.ly/cc-robsolr Articolo IBM su SOLR, parte 1: http://bit.ly/cc-ibmsolr1 Articolo IBM su SOLR, parte 2: http://bit.ly/cc-ibmsolr2 Solr + VIEWS3 : http://bit.ly/cc-solrviews3 http://bit.ly/cc-solrbook Altra presentazione online recente: http://bit.ly/cc-solrsiegfried Velocità pura? SPHINXSEARCH http://sphinxsearch.com/
    • Drupal + Apache SOLR – Claudio Cicali Riferimenti Claudio Cicali [email_address] http://claudio.cicali.name http://bit.ly/cicali http://www.renomo.com
    • Drupal + Apache SOLR – Claudio Cicali Licenza Creative Commons License Attribution-NonCommercial-ShareAlike 2.5 http://creativecommons.org/licenses/by-nc-sa/2.5/ Copyright Claudio Cicali 2009