SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
Symfony2 y Elasticsearch
Gonzalo Míguez
¡Oigo voces! ¿Quién me habla?
● Gonzalo Míguez
– 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
año, y más 'seriamente' los últimos 3-4 meses.
¿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 señor es su Dios:
Fijaos si es majo que os manda un beso.
¿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
búsqueda 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 montón más lo usan.
● Escrito en Java. Trae su propio servidor Jetty.
● Instalación:
– Sencillísima: sudo dpkg -i elasticsearch.deb
● Por defecto correrá en localhost:9200
¿Qué es Apache Lucene?
● Librería de búsqueda FullText
● Veterana: Primera versión de 1999
● Elasticsearch:
– API
– Distribución
– Expone las funcionalidades de Apache Lucene
Conectando Elasticsearch y Symfony2
● Muy fácil 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.* :(
Ejemplo: Configuración Básica
Ejemplo: Configuración Básica (2)
● Estructura de Elasticsearch:
– index ('db')
● type ('table')
– document ('row')
● field ('column')
● Por defecto, los fields string se analizan con el analyzer
standard.
Limitaciones
1) Mapea properties con fields 1-1
✗ No suele ser la solución óptima para búsqueda
2) Comando populate: tira de QueryBuilder de Doctrine
✗ trabaja con las entities enteras (LEEEEENTO)
3) Todos los textos pasarán por el standard analyzer,
✗ No es efectivo para todos los casos
Ejemplo: Configuración Básica (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
¡Pero no es suficiente!¡Necesito MÁS!
● 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
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)
Ejemplo: Búsqueda
Ejemplo: Búsqueda
● 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.
Consideraciones
● Elastica proporciona tipos de queries mucho más complejas
– QueryString: La más 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.
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
búsqueda
● 'Copia de BD' vs 'Datos para buscar'
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)
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 combinación
propia de tokenizer + token filter
Limitaciones: Más 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 típico: cargar traducciones)
Búsqueda: Query vs Filters
● Al buscar, ojo con Query vs Filter.
– Queries
● afectan al 'scoring' de los resultados. (Cómo 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 búsquedas, pasemos a Filters lo que
podamos.
Búsqueda: Facets
● Típico conteo de hits por
categoría
● No están afectados por los
Filters, pero se les puede
aplicar sus propios Filters
● OJO AL LÍO: 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 cuántas películas
de cada género ha
participado.
Percolator
● Es una especie de búsqueda 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 condición X”
Show me the code!
● Podéis encontrar el código usado en esta presentación en:
– https://github.com/mrzard/symfony2-elasticsearch-example
● Si pedís/tenéis una API key de tMDB - http://www.themoviedb.org/ -
hay un command para cargar 250 películas con sus actores,
directores y géneros.
● Cosas a probar:
– Otros analyzers (o crear los tuyos propios).
– Hacer el típico 'autocomplete' al buscar
– Intentar sacar estadísticas con los facets adecuados
– Crear vuestro propio provider y ver la diferencia en la velocidad
de indexación.
● Happy coding!
¡GRACIAS!

Contenu connexe

En vedette

Recent industry developments pose questions about the operators role
Recent industry developments pose questions about the operators roleRecent industry developments pose questions about the operators role
Recent industry developments pose questions about the operators rolexmendel
 
Science Update - No 270 - Apr 2016
Science Update - No 270 - Apr 2016Science Update - No 270 - Apr 2016
Science Update - No 270 - Apr 2016DOILibrary1151
 
Proyecto biogas urbano e r s - pio ernesto ruiz lara-v 1-5_9
Proyecto biogas urbano    e r s - pio ernesto ruiz lara-v 1-5_9Proyecto biogas urbano    e r s - pio ernesto ruiz lara-v 1-5_9
Proyecto biogas urbano e r s - pio ernesto ruiz lara-v 1-5_9Pio Ruiz
 
TeknoLab-IT
TeknoLab-ITTeknoLab-IT
TeknoLab-ITCitrix
 
CONVÊNIO UNIÃO SINDICAL CHAPECÓ E REGIÃO
CONVÊNIO UNIÃO SINDICAL CHAPECÓ E REGIÃOCONVÊNIO UNIÃO SINDICAL CHAPECÓ E REGIÃO
CONVÊNIO UNIÃO SINDICAL CHAPECÓ E REGIÃOsinteimp
 
Ventuno - India's leading ad monetized content syndication platform
Ventuno - India's leading ad monetized content syndication platformVentuno - India's leading ad monetized content syndication platform
Ventuno - India's leading ad monetized content syndication platformMahadevan Jayram
 
Curriculum vitae
Curriculum vitaeCurriculum vitae
Curriculum vitaejosexeng
 
King gates catalogue_2016_en
King gates catalogue_2016_enKing gates catalogue_2016_en
King gates catalogue_2016_enNTM Smarthouse
 
Mateo reinoso carlos fajardo etapas de la luna
Mateo reinoso carlos fajardo etapas de la luna Mateo reinoso carlos fajardo etapas de la luna
Mateo reinoso carlos fajardo etapas de la luna carlosf000
 
A practical intro to web development with mongo db and nodejs when, why and ...
A practical intro to web development with mongo db and nodejs  when, why and ...A practical intro to web development with mongo db and nodejs  when, why and ...
A practical intro to web development with mongo db and nodejs when, why and ...jgarifuna
 
El duelo
El duelo El duelo
El duelo David
 
ACOSO ESCOLAR DE ESTUDIANTES CON IMPEDIMENTOS, Ernesto Perez , Ph.D.
ACOSO ESCOLAR DE ESTUDIANTES CON IMPEDIMENTOS, Ernesto Perez , Ph.D. ACOSO ESCOLAR DE ESTUDIANTES CON IMPEDIMENTOS, Ernesto Perez , Ph.D.
ACOSO ESCOLAR DE ESTUDIANTES CON IMPEDIMENTOS, Ernesto Perez , Ph.D. Ernesto Perez,Ph.D.
 
Exposición: Ccleaner (Prof. Julio C.)
Exposición: Ccleaner (Prof. Julio C.)Exposición: Ccleaner (Prof. Julio C.)
Exposición: Ccleaner (Prof. Julio C.)Viiiry
 

En vedette (20)

Recent industry developments pose questions about the operators role
Recent industry developments pose questions about the operators roleRecent industry developments pose questions about the operators role
Recent industry developments pose questions about the operators role
 
IA and Assurance Path
IA and Assurance PathIA and Assurance Path
IA and Assurance Path
 
Science Update - No 270 - Apr 2016
Science Update - No 270 - Apr 2016Science Update - No 270 - Apr 2016
Science Update - No 270 - Apr 2016
 
Proyecto biogas urbano e r s - pio ernesto ruiz lara-v 1-5_9
Proyecto biogas urbano    e r s - pio ernesto ruiz lara-v 1-5_9Proyecto biogas urbano    e r s - pio ernesto ruiz lara-v 1-5_9
Proyecto biogas urbano e r s - pio ernesto ruiz lara-v 1-5_9
 
Prensa sobre almogia
Prensa sobre almogiaPrensa sobre almogia
Prensa sobre almogia
 
TeknoLab-IT
TeknoLab-ITTeknoLab-IT
TeknoLab-IT
 
CONVÊNIO UNIÃO SINDICAL CHAPECÓ E REGIÃO
CONVÊNIO UNIÃO SINDICAL CHAPECÓ E REGIÃOCONVÊNIO UNIÃO SINDICAL CHAPECÓ E REGIÃO
CONVÊNIO UNIÃO SINDICAL CHAPECÓ E REGIÃO
 
Racismo[1]
Racismo[1]Racismo[1]
Racismo[1]
 
Ventuno - India's leading ad monetized content syndication platform
Ventuno - India's leading ad monetized content syndication platformVentuno - India's leading ad monetized content syndication platform
Ventuno - India's leading ad monetized content syndication platform
 
AMS International
AMS InternationalAMS International
AMS International
 
2014 national-candidates-list1
2014 national-candidates-list12014 national-candidates-list1
2014 national-candidates-list1
 
Florilegio
FlorilegioFlorilegio
Florilegio
 
Curriculum vitae
Curriculum vitaeCurriculum vitae
Curriculum vitae
 
King gates catalogue_2016_en
King gates catalogue_2016_enKing gates catalogue_2016_en
King gates catalogue_2016_en
 
MP (1)
MP (1)MP (1)
MP (1)
 
Mateo reinoso carlos fajardo etapas de la luna
Mateo reinoso carlos fajardo etapas de la luna Mateo reinoso carlos fajardo etapas de la luna
Mateo reinoso carlos fajardo etapas de la luna
 
A practical intro to web development with mongo db and nodejs when, why and ...
A practical intro to web development with mongo db and nodejs  when, why and ...A practical intro to web development with mongo db and nodejs  when, why and ...
A practical intro to web development with mongo db and nodejs when, why and ...
 
El duelo
El duelo El duelo
El duelo
 
ACOSO ESCOLAR DE ESTUDIANTES CON IMPEDIMENTOS, Ernesto Perez , Ph.D.
ACOSO ESCOLAR DE ESTUDIANTES CON IMPEDIMENTOS, Ernesto Perez , Ph.D. ACOSO ESCOLAR DE ESTUDIANTES CON IMPEDIMENTOS, Ernesto Perez , Ph.D.
ACOSO ESCOLAR DE ESTUDIANTES CON IMPEDIMENTOS, Ernesto Perez , Ph.D.
 
Exposición: Ccleaner (Prof. Julio C.)
Exposición: Ccleaner (Prof. Julio C.)Exposición: Ccleaner (Prof. Julio C.)
Exposición: Ccleaner (Prof. Julio C.)
 

Similaire à Symfony2 and ElasticSearch

Conceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEOConceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEOnacho mascort
 
Sistemas de recomendación & Big Data
Sistemas de recomendación & Big DataSistemas de recomendación & Big Data
Sistemas de recomendación & Big DataMartin Bonamico
 
Probando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdfProbando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdfFederico Toledo
 
Argentesting 2017 - Performance testing 101 con jmeter
Argentesting 2017 - Performance testing 101 con jmeterArgentesting 2017 - Performance testing 101 con jmeter
Argentesting 2017 - Performance testing 101 con jmeterArgentesting
 
Tabla comparativa
Tabla comparativa  Tabla comparativa
Tabla comparativa islaacosta
 
Ponele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu StartupPonele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu StartupMartin Siniawski
 
Búsqueda de informacón en GOOGLE
Búsqueda de informacón en GOOGLEBúsqueda de informacón en GOOGLE
Búsqueda de informacón en GOOGLEMaajo Saalazar
 
MÓDULO 1: BÚSQUEDA DE INFORMACIÓN EN GOOLE
MÓDULO 1: BÚSQUEDA DE INFORMACIÓN EN GOOLEMÓDULO 1: BÚSQUEDA DE INFORMACIÓN EN GOOLE
MÓDULO 1: BÚSQUEDA DE INFORMACIÓN EN GOOLEEduardo Salazar
 
Programacion Orientada a Objetos en python
Programacion Orientada a Objetos en pythonProgramacion Orientada a Objetos en python
Programacion Orientada a Objetos en pythonwozgeass
 
Python 3
Python 3Python 3
Python 3CHREAR
 
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_moralesRooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_moralesRootedCON
 
Gaston Riera @ SEOnderground
 Gaston Riera @ SEOnderground Gaston Riera @ SEOnderground
Gaston Riera @ SEOndergroundGaston Riera
 

Similaire à Symfony2 and ElasticSearch (20)

Conceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEOConceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEO
 
Sistemas de recomendación & Big Data
Sistemas de recomendación & Big DataSistemas de recomendación & Big Data
Sistemas de recomendación & Big Data
 
Probando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdfProbando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdf
 
Argentesting 2017 - Performance testing 101 con jmeter
Argentesting 2017 - Performance testing 101 con jmeterArgentesting 2017 - Performance testing 101 con jmeter
Argentesting 2017 - Performance testing 101 con jmeter
 
Busqueda de informacion
Busqueda de informacionBusqueda de informacion
Busqueda de informacion
 
Buscadores
BuscadoresBuscadores
Buscadores
 
Busqueda de informacion
Busqueda de informacion Busqueda de informacion
Busqueda de informacion
 
Tabla comparativa
Tabla comparativa  Tabla comparativa
Tabla comparativa
 
Hack x crack_hacking_buscadores
Hack x crack_hacking_buscadoresHack x crack_hacking_buscadores
Hack x crack_hacking_buscadores
 
Hack x crack_hacking_buscadores
Hack x crack_hacking_buscadoresHack x crack_hacking_buscadores
Hack x crack_hacking_buscadores
 
Ponele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu StartupPonele el TURBO al Dev Team de tu Startup
Ponele el TURBO al Dev Team de tu Startup
 
Búsqueda de informacón en GOOGLE
Búsqueda de informacón en GOOGLEBúsqueda de informacón en GOOGLE
Búsqueda de informacón en GOOGLE
 
Google Hacking
Google HackingGoogle Hacking
Google Hacking
 
MÓDULO 1: BÚSQUEDA DE INFORMACIÓN EN GOOLE
MÓDULO 1: BÚSQUEDA DE INFORMACIÓN EN GOOLEMÓDULO 1: BÚSQUEDA DE INFORMACIÓN EN GOOLE
MÓDULO 1: BÚSQUEDA DE INFORMACIÓN EN GOOLE
 
Programacion Orientada a Objetos en python
Programacion Orientada a Objetos en pythonProgramacion Orientada a Objetos en python
Programacion Orientada a Objetos en python
 
Python 3
Python 3Python 3
Python 3
 
CTF una visión de equipo
CTF una visión de equipoCTF una visión de equipo
CTF una visión de equipo
 
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_moralesRooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
 
Gaston Riera @ SEOnderground
 Gaston Riera @ SEOnderground Gaston Riera @ SEOnderground
Gaston Riera @ SEOnderground
 
¡This is drupal!
¡This is drupal!¡This is drupal!
¡This is drupal!
 

Plus de symfony_bcn

Las buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones SymfonyLas buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones Symfonysymfony_bcn
 
Symfony2 admingenerator
Symfony2 admingeneratorSymfony2 admingenerator
Symfony2 admingeneratorsymfony_bcn
 
Redis–symfony–barcelona–31 05-2012
Redis–symfony–barcelona–31 05-2012Redis–symfony–barcelona–31 05-2012
Redis–symfony–barcelona–31 05-2012symfony_bcn
 
Marcos quesada caching_sf2
Marcos quesada caching_sf2Marcos quesada caching_sf2
Marcos quesada caching_sf2symfony_bcn
 

Plus de symfony_bcn (6)

Las buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones SymfonyLas buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones Symfony
 
Symfony2 admingenerator
Symfony2 admingeneratorSymfony2 admingenerator
Symfony2 admingenerator
 
Symfony and SSL
Symfony and SSLSymfony and SSL
Symfony and SSL
 
PaymentSuite
PaymentSuitePaymentSuite
PaymentSuite
 
Redis–symfony–barcelona–31 05-2012
Redis–symfony–barcelona–31 05-2012Redis–symfony–barcelona–31 05-2012
Redis–symfony–barcelona–31 05-2012
 
Marcos quesada caching_sf2
Marcos quesada caching_sf2Marcos quesada caching_sf2
Marcos quesada caching_sf2
 

Dernier

Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 

Dernier (15)

Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 

Symfony2 and ElasticSearch

  • 2. ¡Oigo voces! ¿Quién me habla? ● Gonzalo Míguez – 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 año, y más '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 señor 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 búsqueda 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 montón más lo usan. ● Escrito en Java. Trae su propio servidor Jetty. ● Instalación: – Sencillísima: sudo dpkg -i elasticsearch.deb ● Por defecto correrá en localhost:9200
  • 5. ¿Qué es Apache Lucene? ● Librería de búsqueda FullText ● Veterana: Primera versión de 1999 ● Elasticsearch: – API – Distribución – Expone las funcionalidades de Apache Lucene
  • 6. Conectando Elasticsearch y Symfony2 ● Muy fácil 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.* :(
  • 8. Ejemplo: Configuración Básica (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 solución óptima para búsqueda 2) Comando populate: tira de QueryBuilder de Doctrine ✗ trabaja con las entities enteras (LEEEEENTO) 3) Todos los textos pasarán por el standard analyzer, ✗ No es efectivo para todos los casos
  • 10. Ejemplo: Configuración Básica (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 MÁS! ● 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)
  • 14. Ejemplo: Búsqueda ● 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 más complejas – QueryString: La más 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 búsqueda ● '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 combinación propia de tokenizer + token filter
  • 19. Limitaciones: Más 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 típico: cargar traducciones)
  • 20. Búsqueda: Query vs Filters ● Al buscar, ojo con Query vs Filter. – Queries ● afectan al 'scoring' de los resultados. (Cómo 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 búsquedas, pasemos a Filters lo que podamos.
  • 21. Búsqueda: Facets ● Típico conteo de hits por categoría ● No están afectados por los Filters, pero se les puede aplicar sus propios Filters ● OJO AL LÍO: 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 cuántas películas de cada género ha participado.
  • 22. Percolator ● Es una especie de búsqueda 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 condición X”
  • 23. Show me the code! ● Podéis encontrar el código usado en esta presentación en: – https://github.com/mrzard/symfony2-elasticsearch-example ● Si pedís/tenéis una API key de tMDB - http://www.themoviedb.org/ - hay un command para cargar 250 películas con sus actores, directores y géneros. ● Cosas a probar: – Otros analyzers (o crear los tuyos propios). – Hacer el típico 'autocomplete' al buscar – Intentar sacar estadísticas con los facets adecuados – Crear vuestro propio provider y ver la diferencia en la velocidad de indexación. ● Happy coding!