En la práctica:
Lucene y Yahoo! BOSS

José Carlos Cortizo Pérez
  http://www.esp.uem.es/jccortizo
  josecarlos.cortizo@uem...
Índice



   Lucene
   Yahoo! BOSS




                 José Carlos Cortizo Pérez
Sistemas Inteligentes de Acceso a
la Información

LUCENE
Lucene
¿Qué es?


     Motor de búsqueda sobre texto
           Orientado a alto rendimiento
           Multiplataforma (J...
Lucene
Búsqueda e Indización



      Lucene es rápido buscando porque utiliza índices
      Inverted Index (palabras --> ...
Lucene
Campos en Lucene



     Un Document consiste en uno o más Fields
     Un Field es un par nombre-valor
         P.e...
Lucene
Búsqueda y consultas


      El proceso de búsqueda requiere que se haya creado algún
      índice
      Necesita q...
Pasos por Proyecto
Determinar como quieres que se vean los resultados

      Es importante saber cómo quieres que se vean ...
Pasos por Proyecto
Ej. código visualización


       System.out.println(quot;Found quot; +
       hits.length() + quot; hi...
Pasos por Proyecto
Mapear tu aplicación al modelo de Lucene


      A partir de la página de resultados, determina los pas...
Pasos por Proyecto
Escribe el código de indexación




      Vengan de donde vengan los datos, lo primero es escribir tu
 ...
Pasos por Proyecto
Escribe el código de indexación


      Directory index = new RAMDirectory();
      IndexWriter w = new...
Pasos por Proyecto
Escribe el código de indexación


      private static void addDoc(IndexWriter
      w, String value) t...
Pasos por Proyecto
Escribe el código de búsqueda, en otra clase

      Es mejor separar la indexación de la búsqueda, tant...
Pasos por Proyecto
Escribe el código de búsqueda (QUERY)




      String querystr = args.length > 0 ?
      args[0] : quo...
Pasos por Proyecto
Escribe el código de búsqueda (SEARCH)




      IndexSearcher s = new
      IndexSearcher(index);

   ...
Pasos por Proyecto
Implementar funcionalidades de búsqueda adicionales


      P.e.
             Filtrados por permisos
  ...
Pasos por Proyecto
Comprueba que tus resultados tienen sentido




      Una exhaustiva fase de pruebas siempre es necesar...
¿Alguna pregunta?




                    José Carlos Cortizo Pérez
Sistemas Inteligentes de Acceso a
la Información

Yahoo! BOSS
Yahoo! BOSS
¿Qué es?



     BOSS = Build your Own Search Service
     Es una plataforma abierta para la construcción de s...
Yahoo! BOSS
¿Por qué usar Yahoo! BOSS?

      Aprovechar
          El ‘know-how’ de Yahoo!
          Sus algoritmos
      ...
Yahoo! BOSS
¿Quién lo está usando?



      Hakia: Un buscador semántico
      Me.dium Search: Buscador social
      Dayli...
Yahoo! BOSS
Limitaciones




               José Carlos Cortizo Pérez
Yahoo! BOSS
Requisitos




      Conseguir un BOSS App ID
             http://developer.yahoo.com/boss




               ...
Yahoo! BOSS
Ejemplo simple (PHP)




                       José Carlos Cortizo Pérez
Yahoo! BOSS



   Simple, ¿no?




                  José Carlos Cortizo Pérez
Yahoo! BOSS
¿Cómo funciona por detrás?



      El API de Yahoo! BOSS recibe una URL tipo
         http://boss.yahooapis.c...
Yahoo! BOSS
¿Cómo funciona por detrás?




                             José Carlos Cortizo Pérez
Yahoo! BOSS
¿Cómo funciona por detrás?




      En función de la URL accedemos a diversos servicios (búsqueda
      sobre...
Yahoo! BOSS
URLS
       Web
          http://boss.yahooapis.com/ysearch/web/v1/{query}?appid={youBOSSappid}
          [&pa...
Yahoo! BOSS
   Pero, si Yahoo! BOSS se encarga de casi todo, ¿yo qué hago?
   Innovar, por supuesto :D
      “Mezclar” las...
¿Alguna pregunta?




                    José Carlos Cortizo Pérez
Bibliografía
Adicional

      http://www.lucenetutorial.com
      Raymond Mooney. Basic Tokenizing, Indexing and
      Imp...
¿Alguna pregunta?




                    José Carlos Cortizo Pérez
Próxima SlideShare
Cargando en…5
×

SINAI: Ejemplos prácticos con Lucene y Yahoo! BOSS

3.327 visualizaciones

Publicado el

Publicado en: Tecnología
0 comentarios
2 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
3.327
En SlideShare
0
De insertados
0
Número de insertados
33
Acciones
Compartido
0
Descargas
50
Comentarios
0
Recomendaciones
2
Insertados 0
No insertados

No hay notas en la diapositiva.

SINAI: Ejemplos prácticos con Lucene y Yahoo! BOSS

  1. 1. En la práctica: Lucene y Yahoo! BOSS José Carlos Cortizo Pérez http://www.esp.uem.es/jccortizo josecarlos.cortizo@uem.es Departamento de Sistemas Informáticos Escuela Superior Politécnica Universidad Europea de Madrid
  2. 2. Índice Lucene Yahoo! BOSS José Carlos Cortizo Pérez
  3. 3. Sistemas Inteligentes de Acceso a la Información LUCENE
  4. 4. Lucene ¿Qué es? Motor de búsqueda sobre texto Orientado a alto rendimiento Multiplataforma (Java) Open Source Con todas las características de un motor avanzado José Carlos Cortizo Pérez
  5. 5. Lucene Búsqueda e Indización Lucene es rápido buscando porque utiliza índices Inverted Index (palabras --> documentos) En Lucene, un Document es la unidad de búsqueda e indización Un Document puede ser un texto, pero también una tabla, u otro tipo de documento estructurado José Carlos Cortizo Pérez
  6. 6. Lucene Campos en Lucene Un Document consiste en uno o más Fields Un Field es un par nombre-valor P.e: title-King Kong La Indexación en Lucene, requiere crear un Documento agregando varios campos, y añadir ese Document al IndexWriter José Carlos Cortizo Pérez
  7. 7. Lucene Búsqueda y consultas El proceso de búsqueda requiere que se haya creado algún índice Necesita que se cree una Query (habitualmente a partir de un QueryParser) y llevar esta Query a un IndexSearcher, que devuelve una lista de coincidencias (Hits) Lucene tiene su propio minilenguaje para realizar búsquedas, permitiendo restricciones booleanas y otras funcionalidades José Carlos Cortizo Pérez
  8. 8. Pasos por Proyecto Determinar como quieres que se vean los resultados Es importante saber cómo quieres que se vean los resultados, porque en función de eso necesitaremos organizar algunas cosas. P.e: ¿Vas a mostrar snippets o no? ¿Cómo vas a enlazar a los documentos? ¿Qué orden vas a seguir con los resultados? ¿Qué forma de visualización? José Carlos Cortizo Pérez
  9. 9. Pasos por Proyecto Ej. código visualización System.out.println(quot;Found quot; + hits.length() + quot; hits.quot;); for(int i=0;i<hits.length();++i) { System.out.println((i + 1) + quot;. quot; + hits.doc(i).get(quot;titlequot;)); } José Carlos Cortizo Pérez
  10. 10. Pasos por Proyecto Mapear tu aplicación al modelo de Lucene A partir de la página de resultados, determina los pasos necesarios para llevar tu aplicación a Lucene ¿Cuáles son los campos del documento? Si tus datos están en una BBDD, ¿qué tablas y columnas necesitas? ¿qué SQL vas a ejecutar para recuperar esos datos? José Carlos Cortizo Pérez
  11. 11. Pasos por Proyecto Escribe el código de indexación Vengan de donde vengan los datos, lo primero es escribir tu propio Indexer Cuándo tengas creado el índice, puedes revisarlo con Luke José Carlos Cortizo Pérez
  12. 12. Pasos por Proyecto Escribe el código de indexación Directory index = new RAMDirectory(); IndexWriter w = new IndexWriter(index, new StandardAnalyzer(), true); addDoc(w, quot;Lucene in Actionquot;); addDoc(w, quot;Lucene for Dummiesquot;); addDoc(w, quot;Managing Gigabytesquot;); addDoc(w, quot;The Art of Computer Sciencequot;); w.close(); José Carlos Cortizo Pérez
  13. 13. Pasos por Proyecto Escribe el código de indexación private static void addDoc(IndexWriter w, String value) throws IOException { Document doc = new Document(); doc.add(new Field(quot;titlequot;, value,Field.Store.YES, Field.Index.TOKENIZED)); w.addDocument(doc); } José Carlos Cortizo Pérez
  14. 14. Pasos por Proyecto Escribe el código de búsqueda, en otra clase Es mejor separar la indexación de la búsqueda, tanto conceptualmente como de forma práctica El Searcher recibirá un String (consulta) y devolverá una lista de Hits Alguna funcionalidad adicional: Limitar el número de resultados Devolver páginas José Carlos Cortizo Pérez
  15. 15. Pasos por Proyecto Escribe el código de búsqueda (QUERY) String querystr = args.length > 0 ? args[0] : quot;lucenequot;; Query q = new QueryParser(quot;titlequot;, new StandardAnalyzer()).parse(querystr); José Carlos Cortizo Pérez
  16. 16. Pasos por Proyecto Escribe el código de búsqueda (SEARCH) IndexSearcher s = new IndexSearcher(index); Hits hits = s.search(q); José Carlos Cortizo Pérez
  17. 17. Pasos por Proyecto Implementar funcionalidades de búsqueda adicionales P.e. Filtrados por permisos Ordenar por fecha (o de otra forma) Buscar por tipo de fichero etc. José Carlos Cortizo Pérez
  18. 18. Pasos por Proyecto Comprueba que tus resultados tienen sentido Una exhaustiva fase de pruebas siempre es necesaria José Carlos Cortizo Pérez
  19. 19. ¿Alguna pregunta? José Carlos Cortizo Pérez
  20. 20. Sistemas Inteligentes de Acceso a la Información Yahoo! BOSS
  21. 21. Yahoo! BOSS ¿Qué es? BOSS = Build your Own Search Service Es una plataforma abierta para la construcción de servicios web de búsqueda Objetivo: Promover la innovación de la industria de búsqueda ¿Quién está detrás? Evidentemente Yahoo! :D José Carlos Cortizo Pérez
  22. 22. Yahoo! BOSS ¿Por qué usar Yahoo! BOSS? Aprovechar El ‘know-how’ de Yahoo! Sus algoritmos Su infraestructura Pero... Pudiendo aportar nuestra propia innovación José Carlos Cortizo Pérez
  23. 23. Yahoo! BOSS ¿Quién lo está usando? Hakia: Un buscador semántico Me.dium Search: Buscador social Daylife: Plataforma de publicación de contenidos Cluuz: Clusteriza y ordena de forma gráfica los resultados José Carlos Cortizo Pérez
  24. 24. Yahoo! BOSS Limitaciones José Carlos Cortizo Pérez
  25. 25. Yahoo! BOSS Requisitos Conseguir un BOSS App ID http://developer.yahoo.com/boss José Carlos Cortizo Pérez
  26. 26. Yahoo! BOSS Ejemplo simple (PHP) José Carlos Cortizo Pérez
  27. 27. Yahoo! BOSS Simple, ¿no? José Carlos Cortizo Pérez
  28. 28. Yahoo! BOSS ¿Cómo funciona por detrás? El API de Yahoo! BOSS recibe una URL tipo http://boss.yahooapis.com/ysearch/web/v1/{query}?appid={youBOSSappid} [&param1=val1&param2=val2&etc] Ej: http://boss.yahooapis.com/ysearch/web/v1/sinai?appid= {youBOSSappid} La procesa y devuelve los resultados en formato XML, de forma que podemos procesarlos y extraer la info José Carlos Cortizo Pérez
  29. 29. Yahoo! BOSS ¿Cómo funciona por detrás? José Carlos Cortizo Pérez
  30. 30. Yahoo! BOSS ¿Cómo funciona por detrás? En función de la URL accedemos a diversos servicios (búsqueda sobre web, noticias, imágenes), diversos parámetros y diversas consultas José Carlos Cortizo Pérez
  31. 31. Yahoo! BOSS URLS Web http://boss.yahooapis.com/ysearch/web/v1/{query}?appid={youBOSSappid} [&param1=val1&param2=val2&etc] Imágenes http://boss.yahooapis.com/ysearch/images/v1/{query}?appid=xyz[&param1=val1&param2=val2&etc Noticias http://boss.yahooapis.com/ysearch/news/v1/{query}?appid=xyz[&param1=val1&param2=val2&etc Spelling http://boss.yahooapis.com/ysearch/spelling/v1/{query}?appid=xyz[&param1=val1&param2=val2&etc José Carlos Cortizo Pérez
  32. 32. Yahoo! BOSS Pero, si Yahoo! BOSS se encarga de casi todo, ¿yo qué hago? Innovar, por supuesto :D “Mezclar” las búsquedas de Yahoo! BOSS con las de otros, p.e. las de Google: http:// code.google.com/apis/ajaxsearch/ Reordenar los resultados Clusterizar Ordenar en líneas temporales Hacer buscadores específicos para medios sociales Etc. José Carlos Cortizo Pérez
  33. 33. ¿Alguna pregunta? José Carlos Cortizo Pérez
  34. 34. Bibliografía Adicional http://www.lucenetutorial.com Raymond Mooney. Basic Tokenizing, Indexing and Implementation of Vector-Space Retrieval. Tema 3, curso IR. http://www.cs.utexas.edu/~mooney/ir-course/slides/Evaluation.ppt Tutorial: Create a Yahoo BOSS powered Site Search Engine http://www.labnol.org/internet/tutorial-create-yahoo-boss-site-search/5636/ Yahoo! BOSS doc: http://developer.yahoo.com/search/boss José Carlos Cortizo Pérez
  35. 35. ¿Alguna pregunta? José Carlos Cortizo Pérez

×