sinai: ejemplos prácticos con lucene y yahoo! boss

35
En la práctica: Lucene y Yahoo! BOSS José Carlos Cortizo Pérez http://www.esp.uem.es/jccortizo [email protected] Departamento de Sistemas Informáticos Escuela Superior Politécnica Universidad Europea de Madrid

Upload: jose-carlos-cortizo-perez

Post on 19-Jun-2015

2.949 views

Category:

Technology


1 download

TRANSCRIPT

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

En la práctica:Lucene y Yahoo! BOSS

José Carlos Cortizo Pérez http://www.esp.uem.es/jccortizo [email protected]

Departamento de Sistemas Informáticos Escuela Superior Politécnica Universidad Europea de Madrid

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

José Carlos Cortizo Pérez

Índice

Lucene

Yahoo! BOSS

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

Sistemas Inteligentes de Acceso a la Información

LUCENE

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

José Carlos Cortizo Pérez

Lucene

Motor de búsqueda sobre texto

Orientado a alto rendimiento

Multiplataforma (Java)

Open Source

Con todas las características de un motor avanzado

¿Qué es?

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Lucene

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

Búsqueda e Indización

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

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

Campos en Lucene

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Lucene

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

Búsqueda y consultas

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Pasos por Proyecto

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?

Determinar como quieres que se vean los resultados

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Pasos por Proyecto

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"));

}

Ej. código visualización

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Pasos por Proyecto

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?

Mapear tu aplicación al modelo de Lucene

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Pasos por Proyecto

Vengan de donde vengan los datos, lo primero es escribir tu propio Indexer

Cuándo tengas creado el índice, puedes revisarlo con Luke

Escribe el código de indexación

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Pasos por Proyecto

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();

Escribe el código de indexación

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Pasos por Proyecto

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);}

Escribe el código de indexación

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Pasos por Proyecto

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

Escribe el código de búsqueda, en otra clase

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Pasos por Proyecto

String querystr = args.length > 0 ? args[0] : "lucene";

Query q = new QueryParser("title", new StandardAnalyzer()).parse(querystr);

Escribe el código de búsqueda (QUERY)

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Pasos por Proyecto

IndexSearcher s = new IndexSearcher(index);

Hits hits = s.search(q);

Escribe el código de búsqueda (SEARCH)

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Pasos por Proyecto

P.e.

Filtrados por permisos

Ordenar por fecha (o de otra forma)

Buscar por tipo de fichero

etc.

Implementar funcionalidades de búsqueda adicionales

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Pasos por Proyecto

Una exhaustiva fase de pruebas siempre es necesaria

Comprueba que tus resultados tienen sentido

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

¿Alguna pregunta?

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

Sistemas Inteligentes de Acceso a la Información

Yahoo! BOSS

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

José Carlos Cortizo Pérez

Yahoo! BOSS

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

¿Qué es?

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Yahoo! BOSS

Aprovechar

El ‘know-how’ de Yahoo!

Sus algoritmos

Su infraestructura

Pero...

Pudiendo aportar nuestra propia innovación

¿Por qué usar Yahoo! BOSS?

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Yahoo! BOSS

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

¿Quién lo está usando?

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Yahoo! BOSSLimitaciones

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Yahoo! BOSS

Conseguir un BOSS App ID

http://developer.yahoo.com/boss

Requisitos

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Yahoo! BOSSEjemplo simple (PHP)

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Yahoo! BOSS

Simple, ¿no?

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Yahoo! BOSS

El API de Yahoo! BOSS recibe una URL tipohttp://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

¿Cómo funciona por detrás?

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Yahoo! BOSS¿Cómo funciona por detrás?

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Yahoo! BOSS

En función de la URL accedemos a diversos servicios (búsqueda sobre web, noticias, imágenes), diversos parámetros y diversas consultas

¿Cómo funciona por detrás?

José Carlos Cortizo Pérez

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

José Carlos Cortizo Pérez

Yahoo! BOSSWeb

http://boss.yahooapis.com/ysearch/web/v1/{query}?appid={youBOSSappid}[&param1=val1&param2=val2&etc]

Imágeneshttp://boss.yahooapis.com/ysearch/images/v1/{query}?appid=xyz[&param1=val1&param2=val2&etc

Noticiashttp://boss.yahooapis.com/ysearch/news/v1/{query}?appid=xyz[&param1=val1&param2=val2&etc

Spellinghttp://boss.yahooapis.com/ysearch/spelling/v1/{query}?appid=xyz[&param1=val1&param2=val2&etc

URLS

José Carlos Cortizo Pérez

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

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

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

José Carlos Cortizo Pérez

¿Alguna pregunta?

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

José Carlos Cortizo Pérez

Bibliografía

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 Enginehttp://www.labnol.org/internet/tutorial-create-yahoo-boss-site-search/5636/

Yahoo! BOSS doc: http://developer.yahoo.com/search/boss

Adicional

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

José Carlos Cortizo Pérez

¿Alguna pregunta?