Explorando la historia y funcionamiento de la memoria ram
Lucene y Yahoo BOSS: Motores de búsqueda abiertos
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. Índice
Lucene
Yahoo! BOSS
José Carlos Cortizo Pérez
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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Pasos por Proyecto
Comprueba que tus resultados tienen sentido
Una exhaustiva fase de pruebas siempre es necesaria
José Carlos Cortizo Pérez
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. 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. 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
27. Yahoo! BOSS
Simple, ¿no?
José Carlos Cortizo Pérez
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}
[¶m1=val1¶m2=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
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. Yahoo! BOSS
URLS
Web
http://boss.yahooapis.com/ysearch/web/v1/{query}?appid={youBOSSappid}
[¶m1=val1¶m2=val2&etc]
Imágenes
http://boss.yahooapis.com/ysearch/images/v1/{query}?appid=xyz[¶m1=val1¶m2=val2&etc
Noticias
http://boss.yahooapis.com/ysearch/news/v1/{query}?appid=xyz[¶m1=val1¶m2=val2&etc
Spelling
http://boss.yahooapis.com/ysearch/spelling/v1/{query}?appid=xyz[¶m1=val1¶m2=val2&etc
José Carlos Cortizo Pérez
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
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