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

3,301 views
3,103 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,301
On SlideShare
0
From Embeds
0
Number of Embeds
33
Actions
Shares
0
Downloads
50
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

×