symfony2 and elasticsearch

Download Symfony2 and ElasticSearch

Post on 20-Jun-2015

1.538 views

Category:

Technology

5 download

Embed Size (px)

DESCRIPTION

Veremos cómo hacer una implementación rápida de ElasticSearch para nuestra aplicación Symfony2. Introducción rápida a ElasticSearch. Cómo interactúa FOSElasticaBundle con nuestros modelo. Cómo personalizar qué información enviamos a ES. Buenas prácticas a la hora de buscar, indexar, analizar y retornar resultados.

TRANSCRIPT

  • 1. Symfony2 y Elasticsearch Gonzalo Mguez

2. Oigo voces! Quin me habla? Gonzalo Mguez Pito del Sereno en ChicPlace.com (AKA: CTO) Anteriormente: Forgotten suggestions lead en Pinroom.com Ignored modernization evangelist en Budgetplaces.com Lead Bug Creator en Motofan.com Solo ante el peligro en Infoelder.com En twitter: mrzard_dev / En GitHub: mrzard He trabajado con Elasticsearch en plan vamos a probar cosas 1 ao, y ms 'seriamente' los ltimos 3-4 meses. 3. Qu es Symfony2? Me parece que te has equivocado de charla... Pero bueno, para resumir.. Es un framework as muy rico, hecho en PHP, ese lenguaje que todos sabemos que tiene una API maravillosa y tal. Este seor es su Dios: Fijaos si es majo que os manda un beso. 4. Qu es Elasticsearch? En sus propias palabras: Elasticsearch is a powerful open source search and analytics engine that makes data easy to explore. En llano: Elasticsearch es un software que nos ayuda a implementar una bsqueda full-text potente sin tener que arrancarnos los pelos. Creado por Shay Banon en 2010. Sobre Apache Lucene (Como Solr) Pensado para entornos distribuidos out-of-the-box API Rest, datos en JSON. Todo se puede hacer con curl. Github, Wordpress, Stackoverflow y un montn ms lo usan. Escrito en Java. Trae su propio servidor Jetty. Instalacin: Sencillsima: sudo dpkg -i elasticsearch.deb Por defecto correr en localhost:9200 5. Qu es Apache Lucene? Librera de bsqueda FullText Veterana: Primera versin de 1999 Elasticsearch: API Distribucin Expone las funcionalidades de Apache Lucene 6. Conectando Elasticsearch y Symfony2 Muy fcil gracias al FOSElasticaBundle FOSElasticaBundle une Elastica, el cliente de Elasticsearch para PHP, y Symfony2. A tener en cuenta: - Ahora mismo, nos ata a Elasticsearch 0.90.* :( 7. Ejemplo: Configuracin Bsica 8. Ejemplo: Configuracin Bsica (2) Estructura de Elasticsearch: index ('db') type ('table') document ('row') field ('column') Por defecto, los fields string se analizan con el analyzer standard. 9. Limitaciones 1) Mapea properties con fields 1-1 No suele ser la solucin ptima para bsqueda 2) Comando populate: tira de QueryBuilder de Doctrine trabaja con las entities enteras (LEEEEENTO) 3) Todos los textos pasarn por el standard analyzer, No es efectivo para todos los casos 10. Ejemplo: Configuracin Bsica (3) Mapeado de campos: Cada field de un type puede ser de un tipo diferente Los tipos por defecto de ElasticSearch son: String Integer / Long Float / Double Boolean Null 11. Pero no es suficiente!Necesito MS! Si el mapeado de tu entity es insuficiente: 'nested' types: 'embeben' un subdocumento. Ejemplo: El documento 'movie' -> subdocs 'actor' 'object' type: Igual que 'nested', pero apoyado en relaciones de Doctrine multi_field: Reemplazado por 'fields' en la 1.0 IDEA! integer y string pueden ser arrays de ints o strings 12. Analyzers Ejemplos de Analyzers: Analyzer: Token Elasticsearch Analyze API! Con Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb Analyzer Tokens Simple dr | strangelove | or | how | i | learned | to | stop | worrying | and | love | the | bomb Standard dr | strangelove | how | i | learned | stop | worrying | love | bomb English dr | strangelov | how | i | learn | stop | worri | love | bomb Spanish dr | strangelov | or | how | i | learned | to | stop | worrying | and | love | the | bomb Keyword Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb (1 token) 13. Ejemplo: Bsqueda 14. Ejemplo: Bsqueda FOSElasticaBundle Acceso a ndices: 'fos_elastica.index.{index_name}.{type_name}'. En el ejemplo: fos_elastica.index.symfony_bcn_example. (movie|genre|director|actor) Queries: Hechas con Elastica. 15. Consideraciones Elastica proporciona tipos de queries mucho ms complejas QueryString: La ms potente y configurable (bastante familiar para los que vienen de Solr) FOSElasticaBundle: Finder: ElasticaQuery Entities Paginadores (knp_paginator, pagerfanta) Listeners (insert, update, delete) No est disponible para el driver propel. 16. Limitaciones: Soluciones (1) Evitar mapeado 1-1 con la entity: provider (para el populate) model_to_elastica_transformer (para los listeners). Normalmente el mapping 1-1 no es bueno para la bsqueda 'Copia de BD' vs 'Datos para buscar' 17. Limitaciones: Soluciones (2) Provider: service que implementa ProviderInterface de FOSElasticaBundle. Queries personalizadas. Mejora de velocidad. model_to_elastica_transformer: Service que debe implementar ModelToElasticaTransformerInterface, 'traducir' nuestra entity a Document de Elastica. (Ejemplo: ModelToElasticaAutoTransformer de FOSElasticaBundle) 18. Limitaciones: Soluciones (3) Para no usar siempre el analyzer standard: Definir un analyzer por field Analyzers nativos de Elasticsearch: Standard, Simple, Whitespace, Stop, Keyword, Pattern, Language, Snowball y Custom Custom analyzer: permite escoger nuestra combinacin propia de tokenizer + token filter 19. Limitaciones: Ms cosas a considerar Si usamos el finder: elastica_to_model_transformer: traduce id's de Elastica a Entities. Ejemplo de uso: eager loading de colecciones asociadas (caso tpico: cargar traducciones) 20. Bsqueda: Query vs Filters Al buscar, ojo con Query vs Filter. Queries afectan al 'scoring' de los resultados. (Cmo de bueno es el match). No pueden ser cacheados Filters Afectan a qu resultados se muestran. (No afecta al scoring). Se pueden cachear Para acelerar bsquedas, pasemos a Filters lo que podamos. 21. Bsqueda: Facets Tpico conteo de hits por categora No estn afectados por los Filters, pero se les puede aplicar sus propios Filters OJO AL LO: Hay FacetFilters para los Facets. No confundir con los FilterFacets, que es crear un facet a partir de un filter Ejemplo: Dado un director, contar en cuntas pelculas de cada gnero ha participado. 22. Percolator Es una especie de bsqueda inversa: Dado un resultado, qu queries satisface? Funcionamiento Nombramos nuestras queries, y las registramos en el percolator Cuando un documento haga match con una de las queries registradas, el percolator nos los dir. Percolator: Hay un nuevo documento que cumple con la condicin X 23. Show me the code! Podis encontrar el cdigo usado en esta presentacin en: https://github.com/mrzard/symfony2-elasticsearch-example Si peds/tenis una API key de tMDB - http://www.themoviedb.org/ - hay un command para cargar 250 pelculas con sus actores, directores y gneros. Cosas a probar: Otros analyzers (o crear los tuyos propios). Hacer el tpico 'autocomplete' al buscar Intentar sacar estadsticas con los facets adecuados Crear vuestro propio provider y ver la diferencia en la velocidad de indexacin. Happy coding! 24. GRACIAS!