Motores de búsqueda Recuperando información  #CPCOIN
Motores de búsqueda Recuperando información  Ignacio Perez - Ingeniero en IndexTank [email_address] http://blog.indextank....
Introducción Dentro de la disciplina de  recuperación de la información  (IR), full-text search es una de las tareas más a...
Conceptos centrales de la búsqueda full-text Full-Text Search
Full-text Search <ul><ul><li>Caso de uso que satisface </li></ul></ul><ul><ul><ul><li>Encontrar documentos textuales a par...
Full-text Search <ul><ul><li>Esto implica varios problemas: </li></ul></ul><ul><ul><ul><li>¿Cómo busco en un corpus muy gr...
Buscar en un corpus Primer approach: Regular expression (automáta finito sin pila) aplicado a todo el corpus (GREP). Probl...
Índice invertido Full-Text Search
Buscar en un corpus - Índice <ul><ul><li>' Índice ' como estructura que nos permite hacer un lookup en O(log(n)) en lugar ...
Índice invertido <ul><ul><li>Índice de un libro:  de un identificador (título) a su contenido. </li></ul></ul><ul><ul><li>...
Índice invertido <ul><ul><li>1: “Todas las hojas son del viento” </li></ul></ul><ul><ul><li>2: “Ya que él las mueve hasta ...
Índice invertido <ul><ul><li>“ Del”: 1,3 </li></ul></ul><ul><ul><li>“ él”: 2 </li></ul></ul><ul><ul><li>“ Hasta”: 2 </li><...
Índice invertido <ul><ul><li>Términos ordenados  (naturalmente por orden lexicográfico) . </li></ul></ul><ul><ul><li>Estru...
Document Analyzer <ul><li>Input:  documentos de texto - textos libres  no estructurados. </li></ul><ul><ul><li>¿Cómo se su...
Document Analyzer <ul><li>Concepto de  término  ( token ) </li></ul><ul><ul><li>Unidad “mínima”  en la que se descomponen ...
Document Analyzer <ul><ul><li>Distintas operaciones durante la tokenización: </li></ul></ul><ul><ul><ul><li>Normalización:...
Consulta (Query) Full-Text Search
Consulta (Query) <ul><ul><li>El  texto de la query  no es simplemente texto libre </li></ul></ul><ul><ul><li>Sintaxis  a p...
Query Parser / Analyzer <ul><li>El texto de la query funciona distinto al del documento. </li></ul><ul><ul><ul><li>AND, OR...
Query Parser / Analyzer <ul><li>Ejemplo de query para nuestro índice:   </li></ul><ul><li>   (Del AND &quot;las hojas&quot...
Query Parser / Analyzer <ul><li>Ejemplo de query para nuestro índice:   </li></ul><ul><li>   (Del AND &quot;las hojas&quot...
Query Parser / Analyzer <ul><ul><li>El Query Parser analiza el texto de la consulta a partir de los operadores (AND, OR, N...
Índice invertido - Posiciones <ul><ul><li>“ Del”: 1(5),3(5) </li></ul></ul><ul><ul><li>“ él”: 2(2) </li></ul></ul><ul><ul>...
Query Parser / Analyzer <ul><li>Ejemplo de query para nuestro índice:   </li></ul><ul><li>   (Del AND &quot;las hojas&quot...
Query <ul><ul><li>Hasta este punto, matcheo binario.  </li></ul></ul><ul><ul><ul><li>Un documento cumple o no con una cond...
Relevancia Full-Text Search
Relevancia <ul><ul><li>Criterio para ordenar:  relevancia  de un documento respecto de una query.  </li></ul></ul><ul><ul>...
Relevancia Textual <ul><ul><li>Criterio de relevancia vinculado al mismo texto de la query. </li></ul></ul><ul><ul><li>Det...
Relevancia Textual <ul><ul><li>TF-IDF :  término más relevante para un documento cuanto más aparezca en ese documento  (fr...
Relevancia por variables <ul><li>La relevancia también puede estar dada por características absolutas de los documentos o ...
Features que mejoran la experiencia del usuario Full-Text Search
Snippets <ul><ul><li>Impacto en la UX </li></ul></ul><ul><ul><ul><li>Permiten al usuario entender la relación entre su que...
Did You Mean <ul><ul><li>Solucionar errores de tipeo.  </li></ul></ul><ul><ul><li>Sugerirle al usuario queries alternativa...
Faceting <ul><ul><li>Corpus estructurado en categorías y subcategorías. </li></ul></ul><ul><ul><li>Resultados de la búsque...
Faceting <ul><ul><li>Corpus estructurado en categorías y subcategorías. </li></ul></ul><ul><ul><li>Resultados de la búsque...
Instant Search <ul><li>Se puede mejorar la experiencia del usuario dándole resultados a medida que escribe. </li></ul><ul>...
Requerimientos no funcionales <ul><li>El tiempo de respuesta de una query es fundamental.  </li></ul><ul><li>La experienci...
Tarea accesoria Full-Text Search
Crawling de documentos <ul><li>Fuera del motor de búsqueda en sí. Tarea común a muchos buscadores. </li></ul><ul><li>Crawl...
Nuestra implementación IndexTank Full-Text Search
Objetivos buscados <ul><li>RealTime : un documento es  buscable  desde el mismo  instante en que es indexado </li></ul><ul...
Objetivos buscados <ul><ul><li>Escalabilidad  (para el usuario y para el servicio):  correr en la nube (AWS) con un paradi...
Índice RealTime <ul><li>Índices en memoria con una solución híbrida: </li></ul><ul><ul><li>Un índice muy performante en cu...
Flexibilidad de relevancia <ul><ul><li>Variables  adosadas a los documentos, modificadas muy frecuentemente (votos, visita...
Escalabilidad <ul><li>Trabajamos sobre la plataforma de AWS, con una arquitectura que permite crecer en el número de índic...
Motores de búsqueda Recuperando información  Preguntas...
Upcoming SlideShare
Loading in …5
×

Introducción a los motores de búsqueda

695
-1

Published on

Presentación en el Campus Party Colombia 04 sobre full-text search

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
695
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Introducción a los motores de búsqueda

  1. 1. Motores de búsqueda Recuperando información #CPCOIN
  2. 2. Motores de búsqueda Recuperando información Ignacio Perez - Ingeniero en IndexTank [email_address] http://blog.indextank.com
  3. 3. Introducción Dentro de la disciplina de recuperación de la información (IR), full-text search es una de las tareas más aplicadas en lo que es desarrollo web. Con el crecimiento de las capacidades técnicas, encontrar información no estructurada dentro de un corpus de datos extenso se ha convertido en una necesidad para un número cada vez mayor de actores. Los motores de búsqueda textual ya no son sólo un requisito de los buscadores web. Las nuevas tendencias en internet implican contenido generado a muy alta velocidad (muchas veces por los mismos usuarios) dentro de una misma aplicación: YouTube, Wikipedia, Twitter, Facebook, Wordpress, Digg. Full-Text Search
  4. 4. Conceptos centrales de la búsqueda full-text Full-Text Search
  5. 5. Full-text Search <ul><ul><li>Caso de uso que satisface </li></ul></ul><ul><ul><ul><li>Encontrar documentos textuales a partir de un una consulta de texto libre. </li></ul></ul></ul><ul><ul><ul><li>Es decir, entender cuáles de los elementos de un corpus está buscando un usuario a partir de una expresión. </li></ul></ul></ul><ul><ul><ul><li>Es decir, responder una pregunta en lenguaje natural a partir de un corpus de documentos de texto. </li></ul></ul></ul>Full-Text Search
  6. 6. Full-text Search <ul><ul><li>Esto implica varios problemas: </li></ul></ul><ul><ul><ul><li>¿Cómo busco en un corpus muy grande de documentos? </li></ul></ul></ul><ul><ul><ul><li>¿Cómo interpreto lo que quiere el usuario? </li></ul></ul></ul><ul><ul><ul><li>¿Cuál es el criterio para decidir que un documento es adecuado? </li></ul></ul></ul><ul><ul><ul><li>¿Cuál es el criterio para decidir entre dos documentos adecuados? </li></ul></ul></ul>Full-Text Search
  7. 7. Buscar en un corpus Primer approach: Regular expression (automáta finito sin pila) aplicado a todo el corpus (GREP). Problema de performance: O(n) donde n es el tamaño del corpus Full-Text Search
  8. 8. Índice invertido Full-Text Search
  9. 9. Buscar en un corpus - Índice <ul><ul><li>' Índice ' como estructura que nos permite hacer un lookup en O(log(n)) en lugar de O(n) </li></ul></ul><ul><ul><li>Índices de DB : Facilitar tareas de ordenamiento o búsqueda. </li></ul></ul><ul><ul><li>Full-text index </li></ul></ul><ul><ul><ul><li>¿Por qué es full text? </li></ul></ul></ul><ul><ul><ul><li>De subelementos ( términos ) a documentos </li></ul></ul></ul>Full-Text Search
  10. 10. Índice invertido <ul><ul><li>Índice de un libro: de un identificador (título) a su contenido. </li></ul></ul><ul><ul><li>Índices numéricos: identifican elementos (a[1], a[2]). </li></ul></ul><ul><ul><li>“ Índice invertido ” va del contenido al identificador y ya no al revés. </li></ul></ul><ul><ul><ul><li>El diccionario es un índice no invertido </li></ul></ul></ul><ul><ul><ul><li>DIRAE es invertido </li></ul></ul></ul>Full-Text Search
  11. 11. Índice invertido <ul><ul><li>1: “Todas las hojas son del viento” </li></ul></ul><ul><ul><li>2: “Ya que él las mueve hasta en la muerte” </li></ul></ul><ul><ul><li>3: “Todas las hojas son del viento” </li></ul></ul><ul><ul><li>4: “Menos la luz del sol” </li></ul></ul><ul><li>Aquí el índice (identificador) va del número de verso al contenido del verso. </li></ul>Full-Text Search
  12. 12. Índice invertido <ul><ul><li>“ Del”: 1,3 </li></ul></ul><ul><ul><li>“ él”: 2 </li></ul></ul><ul><ul><li>“ Hasta”: 2 </li></ul></ul><ul><ul><li>“ Hojas”: 1, 3 </li></ul></ul><ul><ul><li>“ La”: 2, 4 </li></ul></ul><ul><ul><li>“ Las”: 1, 2, 3 </li></ul></ul><ul><ul><li>“ Luz”: 4 </li></ul></ul><ul><li>El índice invertido nos permite ir de una palabra a los versos en que aparece. </li></ul>Full-Text Search Corpus: 1: “Todas las hojas son del viento” 2: “Ya que él las mueve hasta en la muerte” 3: “Todas las hojas son del viento” 4: “Menos la luz del sol”
  13. 13. Índice invertido <ul><ul><li>Términos ordenados (naturalmente por orden lexicográfico) . </li></ul></ul><ul><ul><li>Estructura para realizar búsqueda binaria con bajo costo. </li></ul></ul><ul><ul><li>Array: </li></ul></ul><ul><ul><ul><li>Insertar nuevos elementos (tarea poco frecuente), costo mayor. </li></ul></ul></ul><ul><ul><ul><li>Acceder elementos (tarea muy frecuente), costo menor. </li></ul></ul></ul><ul><ul><ul><li>Lookup en O(log(n)) </li></ul></ul></ul>Full-Text Search
  14. 14. Document Analyzer <ul><li>Input: documentos de texto - textos libres no estructurados. </li></ul><ul><ul><li>¿Cómo se subdivide un texto para construir un índice invertido? </li></ul></ul><ul><ul><ul><li>“ Palabra” definición problemática en las ciencias del lenguaje. </li></ul></ul></ul><ul><ul><ul><li>Criterios gráficos . </li></ul></ul></ul><ul><ul><ul><li>Definiciones accesorias como “lema” o “lexema” </li></ul></ul></ul><ul><ul><li>No todos los tipos de documentos van a ser sólo UN texto. Se los puede subdividir en campos . </li></ul></ul>Full-Text Search
  15. 15. Document Analyzer <ul><li>Concepto de término ( token ) </li></ul><ul><ul><li>Unidad “mínima” en la que se descomponen los documentos textuales. </li></ul></ul><ul><ul><li>Problemas : </li></ul></ul><ul><ul><ul><li>“ aren't”, “you'll”, “l'enfant” </li></ul></ul></ul><ul><ul><ul><li>“ N.L.P.” </li></ul></ul></ul><ul><ul><ul><li>Compounds en alemán </li></ul></ul></ul><ul><ul><ul><ul><li>Soluciones costosas con diccionario </li></ul></ul></ul></ul>Full-Text Search
  16. 16. Document Analyzer <ul><ul><li>Distintas operaciones durante la tokenización: </li></ul></ul><ul><ul><ul><li>Normalización: </li></ul></ul></ul><ul><ul><ul><ul><li>Homogeneizar diferencias no significativas: </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>“ a” “á”, “æ” “ae”, “A” “a” </li></ul></ul></ul></ul></ul><ul><ul><ul><li>Stemming </li></ul></ul></ul><ul><ul><ul><ul><li>Remover terminaciones flexivas: </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>“ casas” “casa”, “buscan” “busc” </li></ul></ul></ul></ul></ul><ul><ul><ul><li>(Implementación abierta: http://snowball.tartarus.org/ ) </li></ul></ul></ul><ul><ul><ul><li>Stopwords </li></ul></ul></ul><ul><ul><ul><ul><li>Remover términos muy comunes no significativos. Palabras funcionales (artículos, preposiciones) </li></ul></ul></ul></ul>Full-Text Search
  17. 17. Consulta (Query) Full-Text Search
  18. 18. Consulta (Query) <ul><ul><li>El texto de la query no es simplemente texto libre </li></ul></ul><ul><ul><li>Sintaxis a partir de la cual es entendida por el motor de búsqueda. </li></ul></ul><ul><ul><li>Sintaxis laxa, pero poderosa a la vez . </li></ul></ul><ul><ul><li>Semánticamente supone un matcheo binario , </li></ul></ul><ul><ul><li>También impacta en la relevancia de los documentos . </li></ul></ul>Full-Text Search
  19. 19. Query Parser / Analyzer <ul><li>El texto de la query funciona distinto al del documento. </li></ul><ul><ul><ul><li>AND, OR, phrase query </li></ul></ul></ul><ul><ul><ul><li>Agrupaciones </li></ul></ul></ul><ul><ul><ul><li>Operador caret </li></ul></ul></ul><ul><ul><li>El query parser  descompone la sintaxis de la query. </li></ul></ul><ul><ul><li>Los términos son trabajados por el tokenizer . </li></ul></ul><ul><li>Operaciones de tokenización que pueden ser exclusivas del query parser: aplicación de sinónimos </li></ul><ul><li>     </li></ul>Full-Text Search
  20. 20. Query Parser / Analyzer <ul><li>Ejemplo de query para nuestro índice:   </li></ul><ul><li>   (Del AND &quot;las hojas&quot;) OR mue* </li></ul><ul><li>Qué resultados matchean y por qué...   </li></ul>Full-Text Search Corpus : 1: “Todas las hojas son del viento” 2: “Ya que él las mueve hasta en la muerte” 3: “Todas las hojas son del viento” 4: “Menos la luz del sol”
  21. 21. Query Parser / Analyzer <ul><li>Ejemplo de query para nuestro índice:   </li></ul><ul><li>   (Del AND &quot;las hojas&quot;) OR mue* </li></ul><ul><li>Qué resultados matchean y por qué:   </li></ul><ul><ul><li>1: “Todas las hojas son del viento” </li></ul></ul><ul><ul><li>2: “Ya que él las mueve hasta en la muerte” </li></ul></ul><ul><ul><li>3: “Todas las hojas son del viento” </li></ul></ul><ul><li>¿Cómo funciona la búsqueda por prefijo   (el término &quot;mue*&quot;)? ¿Y los operadores? </li></ul><ul><li>¿Cómo funciona la búsqueda por frase   (porción entre comillas) con nuestro índice? </li></ul>Full-Text Search Corpus : 1: “Todas las hojas son del viento” 2: “Ya que él las mueve hasta en la muerte” 3: “Todas las hojas son del viento” 4: “Menos la luz del sol”
  22. 22. Query Parser / Analyzer <ul><ul><li>El Query Parser analiza el texto de la consulta a partir de los operadores (AND, OR, NOT, paréntesis). </li></ul></ul><ul><ul><li>Operadores booleanos comunes. Afectan matcheo binario. </li></ul></ul><ul><ul><li>Término con asterisco (&quot;mue*&quot;). Búsqueda por prefijo. </li></ul></ul><ul><ul><ul><li>Ejemplo: &quot;bus*&quot; </li></ul></ul></ul><ul><ul><ul><ul><li>&quot;burlon&quot;: ... </li></ul></ul></ul></ul><ul><ul><ul><ul><li>&quot;bus&quot;: ... </li></ul></ul></ul></ul><ul><ul><ul><ul><li>&quot;busca&quot;: ... </li></ul></ul></ul></ul><ul><ul><ul><ul><li>&quot;buscar&quot;: ... </li></ul></ul></ul></ul><ul><ul><ul><ul><li>&quot;busqueda&quot;: ... </li></ul></ul></ul></ul><ul><ul><ul><ul><li>&quot;buzo&quot;: ... </li></ul></ul></ul></ul>Full-Text Search
  23. 23. Índice invertido - Posiciones <ul><ul><li>“ Del”: 1(5),3(5) </li></ul></ul><ul><ul><li>“ él”: 2(2) </li></ul></ul><ul><ul><li>“ Hasta”: 2(3) </li></ul></ul><ul><ul><li>“ Hojas”: 1(3), 3(3) </li></ul></ul><ul><ul><li>“ La”: 2(2), 4(6) </li></ul></ul><ul><ul><li>“ Las”: 1(2), 2(3), 3(2) </li></ul></ul><ul><ul><li>“ Luz”: 4(3) </li></ul></ul><ul><li>Al agregar las posiciones de los términos, se puede realizar búsqueda por frase y usar el operador AROUND . </li></ul><ul><li>  </li></ul>Full-Text Search
  24. 24. Query Parser / Analyzer <ul><li>Ejemplo de query para nuestro índice:   </li></ul><ul><li>   (Del AND &quot;las hojas&quot;) OR mue* </li></ul><ul><li>Qué resultados matchean y por qué:   </li></ul><ul><ul><li>1: “Todas las hojas son del viento” </li></ul></ul><ul><ul><li>2: “Ya que él las mueve hasta en la muerte” </li></ul></ul><ul><ul><li>3: “Todas las hojas son del viento” </li></ul></ul>Full-Text Search Corpus : 1: “Todas las hojas son del viento” 2: “Ya que él las mueve hasta en la muerte” 3: “Todas las hojas son del viento” 4: “Menos la luz del sol” Índice : “ del”: 1(5), 3(5), 4(4) “ las”: 1(2), 2(4), 3(2) “ hojas”: 1(3), 3(3) “ mueve”: 2(5) “ muerte”: 2(9)
  25. 25. Query <ul><ul><li>Hasta este punto, matcheo binario. </li></ul></ul><ul><ul><ul><li>Un documento cumple o no con una condición textual. Tiene o no los términos que el usuario está buscando. </li></ul></ul></ul><ul><ul><li>Importante pero insuficiente en un corpus extenso. </li></ul></ul><ul><ul><ul><li>La query debe implicar criterios para decidir entre todos los documentos matcheados. </li></ul></ul></ul><ul><li>  </li></ul>Full-Text Search
  26. 26. Relevancia Full-Text Search
  27. 27. Relevancia <ul><ul><li>Criterio para ordenar: relevancia de un documento respecto de una query. </li></ul></ul><ul><ul><li>Cálculo de relevancia difiere entre casos de uso. </li></ul></ul><ul><ul><ul><li>Nuevo </li></ul></ul></ul><ul><ul><ul><li>Popular </li></ul></ul></ul><ul><ul><ul><li>Cercano </li></ul></ul></ul><ul><ul><ul><li>Textualmente relevante </li></ul></ul></ul><ul><ul><li>El cálculo de la relevancia debe llevarse a cabo para cada elemento matcheado del corpus, independientemente de cuestiones de paginado. </li></ul></ul><ul><li>  </li></ul>Full-Text Search
  28. 28. Relevancia Textual <ul><ul><li>Criterio de relevancia vinculado al mismo texto de la query. </li></ul></ul><ul><ul><li>Determinar cuánto “responde” un documento al texto de la query. </li></ul></ul><ul><ul><li>Proceso similar al del matcheo binario: </li></ul></ul><ul><ul><ul><li>Relevancia de cada término: TF-IDF (term frequency – inverse document frequency) </li></ul></ul></ul><ul><ul><ul><li>Composición de la query: Criterios a partir de los operadores booleanos y el calificador caret (“^”). </li></ul></ul></ul>Full-Text Search
  29. 29. Relevancia Textual <ul><ul><li>TF-IDF : término más relevante para un documento cuanto más aparezca en ese documento (frecuencia en el documento) y menos en el corpus (frecuencia inversa de documento) . </li></ul></ul><ul><ul><li>Calificador caret: boostea alguna o algunas de las expresiones. </li></ul></ul><ul><ul><ul><li>(si estoy buscando a una persona es mucho más relevante el match en el campo nombre que en el campo descripción ) </li></ul></ul></ul>Full-Text Search
  30. 30. Relevancia por variables <ul><li>La relevancia también puede estar dada por características absolutas de los documentos o relativas a la query. </li></ul><ul><ul><li>Variables propias de un documento </li></ul></ul><ul><ul><ul><li>Fecha del documento </li></ul></ul></ul><ul><ul><ul><li>Cantidad de vistas </li></ul></ul></ul><ul><ul><ul><li>Número de votos </li></ul></ul></ul><ul><ul><ul><li>Clickthrough </li></ul></ul></ul><ul><ul><li>Variables relativas a la query </li></ul></ul><ul><ul><ul><li>Geolocación : más importantes aquellos documentos geográficamente más cercanos al usuario. </li></ul></ul></ul><ul><ul><ul><li>Grafo social (problema técnico) </li></ul></ul></ul><ul><ul><ul><li>Carecterísticas del usuario (edad, búsquedas anteriores) </li></ul></ul></ul>Full-Text Search
  31. 31. Features que mejoran la experiencia del usuario Full-Text Search
  32. 32. Snippets <ul><ul><li>Impacto en la UX </li></ul></ul><ul><ul><ul><li>Permiten al usuario entender la relación entre su query y los resultados. </li></ul></ul></ul><ul><ul><ul><li>Permiten al usuario elegir el resultado con más criterio. </li></ul></ul></ul><ul><ul><li>Dificultades técnicas </li></ul></ul><ul><ul><ul><li>Best window </li></ul></ul></ul><ul><ul><ul><li>Highlighting de términos </li></ul></ul></ul>Full-Text Search
  33. 33. Did You Mean <ul><ul><li>Solucionar errores de tipeo. </li></ul></ul><ul><ul><li>Sugerirle al usuario queries alternativas (como el “Did you mean” de Google) </li></ul></ul><ul><ul><li>Distintos criterios para decidir cuándo y qué sugerencia mostrar. </li></ul></ul><ul><li>Buscar elementos “parecidos” en el índice: </li></ul><ul><ul><ul><li>Utilizar distancia de edición (en general, Levenshtein ) </li></ul></ul></ul><ul><ul><ul><li>Recorrer elementos del índice en forma eficiente ( trie tree ) </li></ul></ul></ul><ul><ul><ul><li>(Posible solución entendiendo ambas cuestiones como autómatas finitos) </li></ul></ul></ul>Full-Text Search
  34. 34. Faceting <ul><ul><li>Corpus estructurado en categorías y subcategorías. </li></ul></ul><ul><ul><li>Resultados de la búsqueda pueden estructurarse entonces en facets. </li></ul></ul><ul><ul><li>El usuario acota su consulta a partir de categorías. </li></ul></ul><ul><ul><li>Precio </li></ul></ul><ul><ul><ul><li>De 0 a 100 (13) </li></ul></ul></ul><ul><ul><ul><li>De 101 a 500 (45) </li></ul></ul></ul><ul><ul><ul><li>De 501 a 5000 (15) </li></ul></ul></ul><ul><ul><li>Tamaño </li></ul></ul><ul><ul><ul><li>Chico (20) </li></ul></ul></ul><ul><ul><ul><li>Mediano (35) </li></ul></ul></ul><ul><ul><ul><li>Grande (18) </li></ul></ul></ul>Full-Text Search
  35. 35. Faceting <ul><ul><li>Corpus estructurado en categorías y subcategorías. </li></ul></ul><ul><ul><li>Resultados de la búsqueda pueden estructurarse entonces en facets. </li></ul></ul><ul><ul><li>El usuario acota su consulta a partir de categorías. </li></ul></ul><ul><ul><li>Precio </li></ul></ul><ul><ul><ul><li>De 0 a 100 (13) </li></ul></ul></ul><ul><ul><ul><li>De 101 a 500 (45) </li></ul></ul></ul><ul><ul><ul><li>De 501 a 5000 (15) </li></ul></ul></ul><ul><ul><li>Tamaño </li></ul></ul><ul><ul><ul><li>Chico (20) </li></ul></ul></ul><ul><ul><ul><li>Mediano (35) </li></ul></ul></ul><ul><ul><ul><li>Grande (18) </li></ul></ul></ul>Full-Text Search <ul><ul><li>Precio </li></ul></ul><ul><ul><ul><li>De 0 a 100 (0) </li></ul></ul></ul><ul><ul><ul><li>De 101 a 500 (45) </li></ul></ul></ul><ul><ul><ul><li>De 501 a 5000 (0) </li></ul></ul></ul><ul><ul><li>Tamaño </li></ul></ul><ul><ul><ul><li>Chico (16) </li></ul></ul></ul><ul><ul><ul><li>Mediano (18) </li></ul></ul></ul><ul><ul><ul><li>Grande (11) </li></ul></ul></ul>
  36. 36. Instant Search <ul><li>Se puede mejorar la experiencia del usuario dándole resultados a medida que escribe. </li></ul><ul><ul><li>A la Google </li></ul></ul><ul><ul><ul><li>A partir de queries de otros usuarios. </li></ul></ul></ul><ul><ul><li>A la Facebook </li></ul></ul><ul><ul><ul><li>A partir del contenido textual índice. Prefix search. </li></ul></ul></ul>Full-Text Search
  37. 37. Requerimientos no funcionales <ul><li>El tiempo de respuesta de una query es fundamental. </li></ul><ul><li>La experiencia del usuario se degrada a los pocos milisegundos. </li></ul><ul><ul><li>Estudios hechos en Google mostraron que unos pocos milisegundos tienen muy alto impacto en la experiencia del usuario: </li></ul></ul><ul><ul><ul><li>200ms de delay implicaron 0.29% de reducción de tráfico. </li></ul></ul></ul><ul><ul><ul><li>400ms de delay implicaron 0.59% de reducción de tráfico. </li></ul></ul></ul><ul><ul><li>Al tiempo del motor de búsqueda, se suma la renderización. </li></ul></ul>Full-Text Search
  38. 38. Tarea accesoria Full-Text Search
  39. 39. Crawling de documentos <ul><li>Fuera del motor de búsqueda en sí. Tarea común a muchos buscadores. </li></ul><ul><li>Crawler : ingenio que a partir de una serie de criterios, recorre la web periódicamente, fetchea páginas y las deja listas para ser indexadas. </li></ul><ul><ul><li>A través de los propios links . </li></ul></ul><ul><ul><li>Politeness : para evitar bloqueos de IP. </li></ul></ul><ul><ul><li>Profundidad : para buscadores verticales. </li></ul></ul><ul><ul><li>Frecuencia: páginas que cambian más frecuentemente que otras. </li></ul></ul><ul><li> </li></ul>Full-Text Search
  40. 40. Nuestra implementación IndexTank Full-Text Search
  41. 41. Objetivos buscados <ul><li>RealTime : un documento es buscable desde el mismo instante en que es indexado </li></ul><ul><li>Ease of use : encender, configurar e integrar un índice con una aplicación sin esfuerzo. </li></ul><ul><li>Flexibilidad en el manejo de la relevancia : variables por documento actualizadas frecuentemente; funciones de relevancia configurables que se pueden probar inmediatamente sin reindexar . </li></ul>Full-Text Search
  42. 42. Objetivos buscados <ul><ul><li>Escalabilidad (para el usuario y para el servicio): correr en la nube (AWS) con un paradigma de self-service . </li></ul></ul><ul><ul><li>Mejorar la UX : snippets, faceting, geolocation, instant search, did you mean, prefix search, stemming </li></ul></ul>Full-Text Search
  43. 43. Índice RealTime <ul><li>Índices en memoria con una solución híbrida: </li></ul><ul><ul><li>Un índice muy performante en cuanto a utilización de espacio para el largo plazo. </li></ul></ul><ul><ul><li>Un índice realtime con todos los documentos que todavía no llegaron al índice de largo plazo. </li></ul></ul><ul><ul><li>Una estructura realtime para el manejo de eliminaciones y modificaciones </li></ul></ul>Full-Text Search
  44. 44. Flexibilidad de relevancia <ul><ul><li>Variables adosadas a los documentos, modificadas muy frecuentemente (votos, visitas). </li></ul></ul><ul><ul><li>Variables de query consideradas en funciones de relevancia. </li></ul></ul><ul><ul><li>Relevancia de documentos calculada al momento de matchear. </li></ul></ul>Full-Text Search
  45. 45. Escalabilidad <ul><li>Trabajamos sobre la plataforma de AWS, con una arquitectura que permite crecer en el número de índices elásticamente. </li></ul><ul><ul><li>Una capa de API que maneja los requests de los usuarios. </li></ul></ul><ul><ul><li>Un grupo elástico de máquinas (workers) que contienen los índices. </li></ul></ul><ul><ul><li>Un componente de manejo de workers que crea, distribuye y mueve los índices (en forma transparente), crea nuevos workers y alerta sobre distintos problemas que pudiera surgir en la infraestructura. </li></ul></ul><ul><li> </li></ul>Full-Text Search
  46. 46. Motores de búsqueda Recuperando información Preguntas...
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×