Drupal + Apache SOLR

3,235 views

Published on

Published in: Technology
  • Be the first to comment

Drupal + Apache SOLR

  1. 1. Apache SOLR + Drupal Claudio Cicali Claudio Cicali (vedi ultima slide)
  2. 2. Drupal + Apache SOLR – Claudio Cicali Un paio d'anni fa, un nostro cliente...
  3. 3. Drupal + Apache SOLR – Claudio Cicali <ul><ul><li>Documentale con circa 100.000 documenti iniziali, con ipotesi di arrivare fino al milione .
  4. 4. Necessità di ri-pubblicazione su siti “remoti”, Drupal o no
  5. 5. Sistema di ricerca sofisticato e – ovviamente - veloce </li></ul></ul>Il progetto
  6. 6. Drupal + Apache SOLR – Claudio Cicali Nasceva «Mittwoch»
  7. 7. 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... <ul><ul><li>Indicizzazione lenta e non scalabile in maniera lineare
  8. 8. Tabelle di servizio alla ricerca nello stesso DB dei documenti
  9. 9. Indicizzazione contenuti in puro PHP
  10. 10. Impatta direttamente (e in maniera poco predicibile) le prestazioni del cronjob
  11. 11. Non delegabile su altri server
  12. 12. Interfaccia utente non eccezionale per la ricerca avanzata
  13. 13. Modulo esterno per la ricerca a faccette (poco scalabile esso stesso) </li></ul></ul>
  14. 14. 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...)
  15. 15. 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
  16. 16. 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: <ul><ul><li>un modo per DARE informazioni
  17. 17. un modo per RICHIEDERE informazioni
  18. 18. un modo per definire una struttura sulla quale imporre delle condizioni </li></ul></ul>
  19. 19. Drupal + Apache SOLR – Claudio Cicali «Product Highlights» Vale la pena cercare di capire come funziona? <ul><ul><li>SOLR (Lucene) è allo stato dell'arte della ricerca fulltext, sia come funzionalità che come query syntax (con dei limiti...)
  20. 20. Ottime prestazioni ( caching out-of-the-box)
  21. 21. Scalabile all'infinito perché viene gestita la replicazione degli indici
  22. 22. Si appoggia su tecnologie robuste e enterprise grade da anni (Lucene, Tomcat, Java)
  23. 23. Supporto alla faceted search (ricerca a faccette) </li></ul></ul>continua...
  24. 24. Drupal + Apache SOLR – Claudio Cicali «Product Highlights» Vale la pena cercare di capire come funziona? <ul><ul><li>Gestione stemming ( did you mean...? ), sinonimi , more like this
  25. 25. Estensibile (vuoi che la risposta alle ricerche sia in CSV?)
  26. 26. Agnostico sul tipo di documento (nodi Drupal o un catalogo di parti meccaniche). La ricerca è sui campi, non su dei blob
  27. 27. Query time field & document boosting (no reindex)
  28. 28. Highlight e snippet
  29. 29. Gli indici contengono i dati serializzati (query del tipo: “cerca FORD nel TITLE e ritornami BODY, DATE e AUTHOR”) </li></ul></ul>
  30. 30. 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 ;)
  31. 31. Drupal + Apache SOLR – Claudio Cicali Zooming In... Apache SOLR Server La nostra applicazione
  32. 32. Drupal + Apache SOLR – Claudio Cicali Zooming in... Apache SOLR Server HTTP POST/GET La nostra applicazione DB INDEX
  33. 33. 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
  34. 34. 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)
  35. 35. 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> ...
  36. 36. 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
  37. 37. 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).
  38. 38. 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
  39. 39. 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
  40. 40. Drupal + Apache SOLR – Claudio Cicali Interfaccia di “ispezione”
  41. 41. Drupal + Apache SOLR – Claudio Cicali Interfaccia di “ispezione” SOLR “full interface”
  42. 42. Risposta XML Drupal + Apache SOLR – Claudio Cicali
  43. 43. Drupal + Apache SOLR – Claudio Cicali Sommario dei componenti
  44. 44. Drupal + Apache SOLR – Claudio Cicali Ricapitolando Cosa occorre fare, in concreto, per usare un sistema «SOLR powered»? <ul><ul><li>Studiare la documentazione (o il libro)
  45. 45. Creare un SCHEMA.XML che mappi la struttura dei nostri documenti
  46. 46. Interfacciare SOLR alla nostra applicazione
  47. 47. Dare in pasto a SOLR tutti i nostri documenti preesistenti
  48. 48. Tuning </li></ul></ul>
  49. 49. Drupal + Apache SOLR – Claudio Cicali Chi ben comincia... Per Drupal il più è già stato fatto! <ul><ul><li>Studiare la documentazione (o il libro)
  50. 50. Creare un SCHEMA.XML che mappi la struttura dei nostri documenti
  51. 51. Interfacciare SOLR alla nostra applicazione
  52. 52. Dare in pasto a SOLR tutti i nostri documenti preesistenti
  53. 53. Tuning </li></ul></ul>
  54. 54. Drupal + Apache SOLR – Claudio Cicali apachesolr.module Una leeeeeeeeeeeeeeeenta gestazione... e ancora siamo alla RC3 Robert Douglass et al.
  55. 55. Drupal + Apache SOLR – Claudio Cicali apachesolr.module Si installa come un normale modulo, ma in più: <ul><ul><li>si devono copiare i file SCHEMA.XML e SOLRCONFIG.XML nel posto giusto
  56. 56. Libreria “standard” PHP per il protocollo applicativo verso SOLR: </li></ul></ul>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 :(
  57. 57. 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
  58. 58. Drupal + Apache SOLR – Claudio Cicali DEMO
  59. 59. Drupal + Apache SOLR – Claudio Cicali search.module Disabilitare il cron per la ricerca “core”
  60. 60. Drupal + Apache SOLR – Claudio Cicali Titolo
  61. 61. Drupal + Apache SOLR – Claudio Cicali Stato dell'indicizzazione
  62. 62. Drupal + Apache SOLR – Claudio Cicali Faceted search
  63. 63. Drupal + Apache SOLR – Claudio Cicali Document boosting, AKA “bias”
  64. 64. Drupal + Apache SOLR – Claudio Cicali
  65. 65. Drupal + Apache SOLR – Claudio Cicali Field boosting
  66. 66. Drupal + Apache SOLR – Claudio Cicali Inoltre... Dalla distribuzione standard del modulo si ha già l'integrazione con OG , NODEACCESS , IMAGE
  67. 67. 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»
  68. 68. 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
  69. 69. 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/
  70. 70. Drupal + Apache SOLR – Claudio Cicali Riferimenti Claudio Cicali [email_address] http://claudio.cicali.name http://bit.ly/cicali http://www.renomo.com
  71. 71. 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

×