SINAI: Ejemplos prácticos con Lucene y Yahoo! BOSS - Presentation Transcript
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
Í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 (Java)
Open Source
Con todas las características de un motor avanzado
José Carlos Cortizo Pérez
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
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
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
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
Pasos por Proyecto
Ej. código visualización
System.out.println(\"Found \" +
hits.length() + \" hits.\");
for(int i=0;i<hits.length();++i) {
System.out.println((i + 1) + \". \"
+ hits.doc(i).get(\"title\"));
}
José Carlos Cortizo Pérez
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
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
Pasos por Proyecto
Escribe el código de indexación
Directory index = new RAMDirectory();
IndexWriter w = new IndexWriter(index,
new StandardAnalyzer(), true);
addDoc(w, \"Lucene in Action\");
addDoc(w, \"Lucene for Dummies\");
addDoc(w, \"Managing Gigabytes\");
addDoc(w, \"The Art of Computer
Science\");
w.close();
José Carlos Cortizo Pérez
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(\"title\",
value,Field.Store.YES,
Field.Index.TOKENIZED));
w.addDocument(doc);
}
José Carlos Cortizo Pérez
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
Pasos por Proyecto
Escribe el código de búsqueda (QUERY)
String querystr = args.length > 0 ?
args[0] : \"lucene\";
Query q = new QueryParser(\"title\", new
StandardAnalyzer()).parse(querystr);
José Carlos Cortizo Pérez
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
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
Pasos por Proyecto
Comprueba que tus resultados tienen sentido
Una exhaustiva fase de pruebas siempre es necesaria
José Carlos Cortizo Pérez
¿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 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
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
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
Yahoo! BOSS
Limitaciones
José Carlos Cortizo Pérez
Yahoo! BOSS
Requisitos
Conseguir un BOSS App ID
http://developer.yahoo.com/boss
José Carlos Cortizo Pérez
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.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
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 web, noticias, imágenes), diversos parámetros y diversas
consultas
José Carlos Cortizo Pérez
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
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
¿Alguna pregunta?
José Carlos Cortizo Pérez
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
0 comments
Post a comment