Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Apache Solr @ Welovephp by Softonic

Apache Solr @ Welovephp by Softonic

Intro a Apache Solr

Santiago Lizardo

December 15, 2012
Tweet

More Decks by Santiago Lizardo

Other Decks in Technology

Transcript

  1. Funcionalidades – Highlighting – Navegación por filtros y conteos –

    Corrector ortográfico – Autocompletador de búsquedas – Resultados similares – ¡Más!
  2. Detrás de escenas: Lucene • Código abierto • Libreria de

    indexación y búsqueda de texto • No es un servidor • No tiene ficheros de configuración – Analizadores de texto (de frases a términos) – Sintáxis de búsqueda – Algoritmo de puntuación
  3. Solr: Lucene con esteroides • Lucene como servidor • Procesos

    de indexación y búsqueda mediante HTTP • Varios niveles de cache • Administración Web • Ficheros de configuración para el esquema y el servidor • Conteos (faceting), Spellchecker, Morelikethis • Escalable
  4. Desplegando Solr • Aplicación Web (WAR != JAR) • Corre

    sobre diferentes servidores de aplicaciones
  5. Diferencias sobre una base de datos • Solr es una

    coleccion de documentos NO relacional • Los documentos son inmutables • Búsqueda por términos, no por texto • Resultados ordenados por nivel de coincidencia • Commits lentos (modelo NoSQL)
  6. Cambios en el indice • Efectuar cambios – <commit/> •

    Deshacer cambios – <rollback/> • Optimizar indice – <optimize/>
  7. Elementos de la respuesta • Tipos de datos – arr

    – str – bool – int – float • Multivalor
  8. Parametros de búsqueda • q: Los terminos de búsqueda •

    df: Campo de búsqueda por defecto • qt: Tipo de consulta • fl: Listado de campos • sort: Criterio de ordenación
  9. Parametros de busqueda: wt • Writer type • Formatos incluidos:

    – xml – javabin – json – python – php + phps – ruby
  10. Sintaxis de búsqueda • Termino obligatorio (incluir) +java • Termino

    prohibido (excluir) -php • Termino opcional html • Tambien AND, OR y NOT
  11. Sintaxis de busqueda: Comodines • Todos los valores de cualquier

    campo (todos los docs) – *:* • Campo especifico – title:something • Comodines – *, ? – lun* – sep?a
  12. Distancia entre palabras • Frases literales – “css guidelines” •

    Definir la distancia – “css guidelines”~3 • css new guidelines • css new browser standard guidelines
  13. Busqueda por rangos • Funciona con los tipos de datos:

    fecha, numero, moneda • a_begin_date:[1990-01-01T00:00:00.000Z TO 1999-12- 31T24:59:99.999Z] • r_event_date:[* TO NOW-2YEAR] • t_duration:[300000 TO *] • somefield:[B TO C]
  14. Solr: Directorio principal • conf: Ficheros de configuracion – schema.xml

    La estructura de datos (tipos, analizadores, etc) – solrconfig.xml Configuracion principal (componentes, controladores) • http://.../update • http://.../select • data: El indice de Lucene • lib: Librerias Java basicas y adicionales
  15. Fichero de configuracion: schema.xml • Lista de tipos • Lista

    de campos • Definicion de la clave primaria
  16. Schema.xml • Tipos de campo – Nombres unicos – Asociados

    a una clase Java (ej: solr.IntField) • Propiedades – indexed – stored • compressed – multivalued
  17. Schema.xml • Propiedades – name – type (una referencia a

    los tipos creados antes) – default – required
  18. Schema.xml • Campos especiales – copyField: Anadir el contenido de

    uno varios campos – dynamicField: Anadir columnas dinamicamente
  19. Analisis de texto • Separacion en terminos (tokenizer) • Normalizacion

    (may/minusc) • Raizes • Sinonimos • Objetivo: Convertir frases en terminos • Esencial porque las personas no buscan de la misma forma en que los datos estan indexados
  20. Analisis de texto • El unico tipo de datos con

    analizadores es solr.TextField • Dos cadenas: index, query – Un tokenizador por cadena. Cero o mas filtros. • Filtros a nivel de caracter: (CharFilterFactory) – Quitar acentos – Quitar signos de puntuacion – Etc...
  21. Tokenizers • Separan en partes (tokens) una cadena de texto

    • WhitespaceTokenizerFactory: Espacios (tabs, …) • KeywordTokenizerFactory • StandardTokenizerFactory: Espacios, signos de puntuacion, guiones, etc... (no separa urls, ni emails) • PatternTokenizerFactory: Expresiones regulares
  22. Stemming • Reducir palabras derivadas a su forma base (raiz)

    • Diferentes implementaciones: – EnglishPorterFilterFactory – SnowballPorterFilterFactory
  23. Sinonimos • Filtro para buscar por sinonimos • <filter class="solr.SynonymFilterFactory"

    synonyms="synonyms.txt" ignoreCase="true" expand="true"/> • i-pod, i pod => ipod
  24. Stopwords • Filtro • Excluye de la cadena las palabras

    contenidas en el listado • <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
  25. Otros filtros • StandardFilterFactory: Quita signos entre palabras (I.B.M. =>

    IBM) • LowerCaseFilterFactory: Pone en minusculas todo el texto • KeepWordFilterFactory: Solo indexa/busca las palabras en el listado • LengthFilterFactory: Filtra palabras por longitud • RemoveDuplicatesTokenFilterFactory • ISOLatin1AccentFilterFactory
  26. Componentes de busqueda • Mecanismo para extender la funcionalidad principal

    – QueryComponent – DebugComponent – FacetComponent • Otros – Highlighting – Query elevation – Spell checking – More like this –
  27. Spellchecker • Presenta el tipico “Quiso decir...?” • Basado en

    palabras – De un diccionario – Del propio indice
  28. Cores • Tener multiples indices en una misma aplicacion •

    Por ejemplo, verticals: jobs, cars, homes • http://localhost:8983/solr/select?q=dave%20matthews • http://localhost:8983/solr/mbartists/select?q=dave %20matthews
  29. Accediendo a Solr desde PHP • Dos diferentes Writer types:

    php, phps • <queryResponseWriter name="php" • class="org.apache.solr.request.PHPResponseWriter"/> • <queryResponseWriter name="phps" • class="org.apache.solr.request.PHPSerializedResponse Writer"/>
  30. • a:2:{s:14:"responseHeader";a:3: {s:6:"status";i:0;s:5:"QTime";i:1;s:6:" • params";a:5: {s:2:"wt";s:4:"phps";s:6:"indent";s:2:"on";s:4:"rows";s:1: • "1";s:5:"start";s:1:"0";s:1:"q";s:11:"Pete Moutso";}}s:8:"response";a: •

    3:{s:8:"numFound";i:523;s:5:"start";i:0;s:4:"docs";a:1:{i:0;a:4:{s:6:" • a_name";s:11:"Pete Moutso";s:6:"a_type";s:1:"1";s:2:"id";s:13:"Artist: • 371203";s:4:"type";s:6:"Artist";}}}}
  31. DataImportHandler • Obtener la informacion del indice de origenes de

    datos diversos. – XML – Documentos ricos: Pdf, XLS, Doc, PPT, … – Base de datos – Cuentas de correo • Puede extraer y transformar datos • Deltas
  32. Configuracion del DIH • Habilitar controlador <requestHandler name="/dataimport" • class="org.apache.solr.handler.dataimport.DataImportHandler">

    • <lst name="defaults"> • <str name="config">mb-dih-artists-jdbc.xml</str> • </lst> • </requestHandler> • Presente en el panel de administracion • curl http://localhost:8983/solr/dataimport -F command=full-import
  33. Solr Cell • Utiliza Apache Tika para extraer metadata de

    ficheros “ricos” • Requiere un controlador especifico habilitado • <requestHandler name="/update/extract" • class="org.apache.solr.handler.extraction.ExtractingRequestHandler "> • <lst name="defaults"> • <str name="map.Last-Modified">last_modified</str> • <str name="uprefix">metadata_</str> • </lst> • </requestHandler>
  34. Solr o Sphinx? • Buenos productos • Larga lista de

    empresas que los utilizan • Ambos son de codigo abierto • Ambos ofrecen soporte comercial • Clientes para muchos lenguajes • Ambos pueden escalar
  35. Solr o Sphinx? • Menor consumo de memoria • Mas

    funcionalidades • Desligado del origen de datos (no rdbms)
  36. • Shinx como un complemento de tu Web • Solr

    si tu Web esta centrada en busqueda