SlideShare a Scribd company logo
1 of 38
Download to read offline
develon /
fullycommerce
develon /
fullycommerce
Full Service Provider
develon /
fullycommerce
• Criticità della ricerca su Magento CE
• Il progetto elasticsearch
• Integrazione tra elasticsearch e Magento CE
• mapping (fields, analyzers, boost)
• infrastruttura
• query
• Renderizzazione dei risultati
• E se usassimo elasticsearch per tutti i casi di
navigazione layered?
Outline
develon /
fullycommerce
Voglio comprare un ago in
questo pagliaio
ovvero l’importanza della ricerca nell’ecommerce
develon /
fullycommerce
Perché investire sull’internal search?
• il 30% dei visitatori usa la ricerca interna
(eConsultancy, 2012)
• chi usa la ricerca è un visitatore di valore
(conversion rate più alto del 70%-80%)
• gli utenti si aspettano
strumenti avanzati di
ricerca (pertinenza, do you
mean, autocomplete,
instant search)
develon /
fullycommerce
Perché investire sull’internal search?
• grande vantaggio
competitivo
(Baymard Institute,
2014)
• i dati raccolti con la
ricerca interna
sono fondamentali
per il marketing
develon /
fullycommerce
rilevanza
performance
prossimità
La Ricerca in Magento CE
• Like
• Fulltext
• Combine (Like+Fulltext)
develon /
fullycommerce
Product or not product?
Magento indicizza e
ricerca solo i prodotti
no categorie
no pagine CMS
no altri contenuti
(wordpress, typo3, …)
develon /
fullycommerce
Il progetto elasticsearch
develon /
fullycommerce
elasticsearch
• full-text search server basato su
• utilizzato in produzione nel mercato
• supportato dalla community (licenza apache 2) e
dall’azienda omonima
develon /
fullycommerce
Caratteristiche strutturali
• distribuito, affidabile e scalabile
develon /
fullycommerce
Caratteristiche interfaccia
• restful api
• schema free
• query DSL
curl -XPUT ‘http://elastic:9200/doc_it' -d '
{
"settings": {
"number_of_shards" : 5,
"number_of_replicas" : 1,
}
}'
curl -XPUT 'http://elastic:9200/doc_it/product' -d '
{
"sku":"1775X59",
"name":"DEAN AX®",
"description":"Dean AX® è pensato per ….",
"id":"19050"
}'
curl -XGET 'http://elastic:9200/doc_it/product/_search' -d '
{
"query": {
"match" : {
"name" : "DEAN"
}
}
}'
develon /
fullycommerce
Caratteristiche tecniche
• (near) real time
• real time analytics
• optimistic version control
• per operation persistence
• interfaces: head, inquisitor,
browser
• molto altro …..
develon /
fullycommerce
elasticsearch vs Solr
• multitenancy as default
• nativamente cloud oriented
• supporto per documenti “strutturati”
• possibilità di piani di supporto business
• caratteristiche tecniche in continua evoluzione
• interesse in crescita, community in crescita
develon /
fullycommerce
Configurare elasticsearch
per l’ecommerce
develon /
fullycommerce
Mapping
• Attributi analyzed e attributi stored
• Attributi base: sku, name, description, short_description
• Attributi numerici: prezzo
• Attributi gerarchici / ordinati: categorie
• Attributi di view: lingua / store view
• Altri contenuti
• Immagini?
develon /
fullycommerce
Mapping
• quale analyzer scelgo
per i vari attributi?
• analysis = charFilter +
tokenizer + tokenFilter
{
"analysis": {
"analyzer": {
"std_stemmed_it": {
"char_filter": "html_strip",
"filter": [
"it_stop",
"lowercase",
"it_stemmer"
],
"tokenizer": "standard",
"type": "custom"
}
},
"filter": {
"it_stemmer": {
"name": "light_italian",
"type": "stemmer"
},
"it_stop": {
"name": "it_stop",
"stopwords": "_italian_",
"type": "stop"
}
}
}
}
develon /
fullycommerce
Integrare elasticsearch e
Magento
develon /
fullycommerce
Infrastruttura
• Topologia presa in esame
develon /
fullycommerce
Infrastruttura ETL
• Indicizzazione bulk utilizzando ETL/ESB
develon /
fullycommerce
Infrastruttura river
• I data-pump di elasticsearch: i River
• Indicizzazione in real-time usando
RabbitMQ river
<events>
<catalog_product_save_after>
<observers>
<fullycommerce_reindex_product>
<class>elasticsearch/observer</class>
<method>productReindex</method>
</fullycommerce_reindex_product>
</observers>
</catalog_product_save_after>
</events>
develon /
fullycommerce
Librerie PHP di connessione
$qb = new ElasticaQueryBuilder();
$query=$qb->query()
->multi_match()
->setFields(array('name^2', 'description', 'sku^3'))
->setQuery($q);
• Rest client + JSON
handling
• Elastica: approccio
Object Oriented con
query builder
develon /
fullycommerce
“Hello world”: una semplice query di ricerca
$this->_elasticaclient = new ElasticaClient(array(
'host' => 'localhost',
'port' => '9200'
));
$search = new ElasticaSearch($this->_elasticaclient);
$search->addIndex($this->_index)->addType($this->_type);
$qb = new ElasticaQueryBuilder();
$query=$qb->query()
->multi_match()
->setFields(array('name^2', 'description', 'sku^3'))
->setQuery($q);
$suggest = $qb->suggest()
->term('suggest_description', 'description')
->setText($q);
$elastic_query=new ElasticaQuery();
$elastic_query->setQuery($query)
->setSuggest(new ElasticaSuggest($suggest));
$search->setQuery($elastic_query);
$resultset=$search->search();
print_r($resultset->getResults());
if($resultset->hasSuggests()){
print_r($resultset->getSuggests());
}
develon /
fullycommerce
{
"query": {
"filtered": {
"query": {
"bool": {
"should": [
{
"fuzzy_like_this": {
"fields": [
"color_en",
"color_it",
"manufacturer_en",
"manufacturer_it",
"name_en",
"name_it",
"description_en",
"description_it",
"short_description_en",
"short_description_it",
"sku",
"category_terms_en",
"category_terms_it"
],
"boost": 1,
"like_text": "(scrpe puma)",
"min_similarity": 0.7,
"prefix_length": 0,
"ignore_tf": false,
"max_query_terms": 10
}
• multi term query rewrite
• template query
• elasticsearch prevede
39 tipi di query a
fronte dei 13 tipi
previsti da Lucene.
• La nostra scelta è stata
di combinare una
ricerca esatta
(query_string)
con una ricerca fuzzy
(fuzzy_like_this),
e poi filtrare per store
Le query di elasticsearch
develon /
fullycommerce
develon /
fullycommerce
develon /
fullycommerce
develon /
fullycommerce
develon /
fullycommerce
Come mostrare i risultati
• Utilizzando le collection di Magento (filtro per
product_id)
$ids = $this->getSearchResultIds();
$this->addIdFilter($ids);
• Renderizzando direttamente gli oggetti JSON restituiti
da elasticsearch
Vantaggi: non serve arricchimento,
in automatico paginazione, ordinamento, ecc.
Svantaggi: seconda query su DB (lentezza)
Vantaggi: molto veloce
Svantaggi: necessità di indicizzare i dati necessari per il
template
paginazione e ordinamento molto complicati
Soluzione preferibile per l’autocomplete
develon /
fullycommerce
E se usassimo elasticsearch per tutti i
casi di layered navigation?
• È la soluzione
adottata dalla
maggior parte
dei moduli
• Performance
migliori?
• Fragilità della
soluzione!!!
<config>
<global>
<blocks>
<nanowebg_elasticsearch>
<class>NanoWebG_ElasticSearch_Block</class>
</nanowebg_elasticsearch>
<catalog>
<rewrite>
<layer_view>
NanoWebG_ElasticSearch_Block_Catalog_Layer_View
</layer_view>
</rewrite>
</catalog>
<catalogsearch>
<rewrite>
<layer>
NanoWebG_ElasticSearch_Block_Catalogsearch_Layer
</layer>
</rewrite>
</catalogsearch>
</blocks>
</global>
</config>
develon /
fullycommerce
Integrazioni esistenti
• moltissimi progetti nati
nell’ultimo anno
develon /
fullycommerce
L’ecosistema elasticsearch
Oltre la ricerca: ELK-stack
• logstash:
per centralizzare, elaborare e instradare i log
• kibana:
sistema di visualizzazione dati in real-time
develon /
fullycommerce
Dubbi, domande, perplessità…
develon /
fullycommerce
References (1)
Sulla ricerca interna nell’ecommerce
• Why Ecommerce Stores Can't Afford to Ignore Site Search,
di Barett Johnson, 4/11/2014, visitato il 27/2/2014
http://blog.swiftype.com/why-ecommerce-stores-cant-afford-to-ignore-site-
search
• The Current State Of E-Commerce Search,
di Christian Holst, 18/08/2014, visitato il 27/2/2014
http://www.smashingmagazine.com/2014/08/18/the-current-state-of-e-
commerce-search/
Elasticsearch
• Il nuovo sito (lanciato il 10/3/2015) :
https://www.elastic.co/
• Elastica:
http://elastica.io/
develon /
fullycommerce
References (2)
Elasticsearch e Magento
• BubbleShop Extension for Elasticsearch,
https://www.bubbleshop.net/magento-elasticsearch.html
• Qbox Elasticsearch Extension,
http://www.magentocommerce.com/magento-connect/qbox-
elasticsearch-extension.html
• Johann Reinke Extension (versione preliminare di BubbleShop)
https://github.com/jreinke/magento-elasticsearch
• Carlo Tasca Extension (non utilizza Elastica)
https://github.com/ctasca/magento-elasticsearch-module
develon /
fullycommerce
Manuel Toniato
manuel.toniato@fullycommerce.com
https://www.linkedin.com/pub/manuel-toniato/45/7a/61b
https://twitter.com/manuel_toniato
Simone Caretta
simone.caretta@develon.com
https://www.linkedin.com/pub/simone-caretta/4/90b/383
https://plus.google.com/+SimoneCaretta/posts
© 2013, Develon srl - Tutti i diritti riservati. Questo documento è protetto da copyright. Nessuna parte di esso può essere modificato, riprodotto o distribuito in qualunque forma o con qualunque mezzo, senza previa
autorizzazione scritta di Develon srl.
develon /
fullycommerce
www.develon.com - www.fullycommerce.com

More Related Content

What's hot

Creating Highly-Available MongoDB Microservices with Docker Containers and Ku...
Creating Highly-Available MongoDB Microservices with Docker Containers and Ku...Creating Highly-Available MongoDB Microservices with Docker Containers and Ku...
Creating Highly-Available MongoDB Microservices with Docker Containers and Ku...
MongoDB
 

What's hot (7)

MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009
 
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
 
JBoss Data Grid Tech Lab
JBoss Data Grid Tech LabJBoss Data Grid Tech Lab
JBoss Data Grid Tech Lab
 
Back to Basics webinar 1 IT 17 - Introduzione ai NoSQL
Back to Basics webinar 1 IT 17 - Introduzione ai NoSQLBack to Basics webinar 1 IT 17 - Introduzione ai NoSQL
Back to Basics webinar 1 IT 17 - Introduzione ai NoSQL
 
Creating Highly-Available MongoDB Microservices with Docker Containers and Ku...
Creating Highly-Available MongoDB Microservices with Docker Containers and Ku...Creating Highly-Available MongoDB Microservices with Docker Containers and Ku...
Creating Highly-Available MongoDB Microservices with Docker Containers and Ku...
 
Back to Basics, webinar 4: Indicizzazione avanzata, indici testuali e geospaz...
Back to Basics, webinar 4: Indicizzazione avanzata, indici testuali e geospaz...Back to Basics, webinar 4: Indicizzazione avanzata, indici testuali e geospaz...
Back to Basics, webinar 4: Indicizzazione avanzata, indici testuali e geospaz...
 
Back to Basics, webinar 6: Messa in esercizio
Back to Basics, webinar 6: Messa in esercizioBack to Basics, webinar 6: Messa in esercizio
Back to Basics, webinar 6: Messa in esercizio
 

Viewers also liked

Mauro Lorenzutti: Quale CMS per Magento?
Mauro Lorenzutti: Quale CMS per Magento?Mauro Lorenzutti: Quale CMS per Magento?
Mauro Lorenzutti: Quale CMS per Magento?
Meet Magento Italy
 
merck 2Q05 Earnings Release
merck 	2Q05 Earnings Releasemerck 	2Q05 Earnings Release
merck 2Q05 Earnings Release
finance11
 
Potipoti AW09 Cataloge
Potipoti AW09 CatalogePotipoti AW09 Cataloge
Potipoti AW09 Cataloge
subdebut
 
Ma no-presentation-2013
Ma no-presentation-2013Ma no-presentation-2013
Ma no-presentation-2013
dekow
 

Viewers also liked (20)

Elasticsearch a quick introduction
Elasticsearch a quick introductionElasticsearch a quick introduction
Elasticsearch a quick introduction
 
Fast data platforms - Hadoop User Group (Italy)
Fast data platforms  - Hadoop User Group (Italy)Fast data platforms  - Hadoop User Group (Italy)
Fast data platforms - Hadoop User Group (Italy)
 
Basilio Bentivegna: I principali business trends nell’eCommerce per il 2015
Basilio Bentivegna: I principali business trends nell’eCommerce per il 2015Basilio Bentivegna: I principali business trends nell’eCommerce per il 2015
Basilio Bentivegna: I principali business trends nell’eCommerce per il 2015
 
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
 
Mauro Lorenzutti: Quale CMS per Magento?
Mauro Lorenzutti: Quale CMS per Magento?Mauro Lorenzutti: Quale CMS per Magento?
Mauro Lorenzutti: Quale CMS per Magento?
 
Roberto Fumarola: Quali errori evitare nel mobile eCommerce
Roberto Fumarola: Quali errori evitare nel mobile eCommerceRoberto Fumarola: Quali errori evitare nel mobile eCommerce
Roberto Fumarola: Quali errori evitare nel mobile eCommerce
 
Networked Exponentials
Networked ExponentialsNetworked Exponentials
Networked Exponentials
 
Magento best practices
Magento best practicesMagento best practices
Magento best practices
 
Sergii Shymko: Magento 2: Composer for Extensions Distribution
Sergii Shymko: Magento 2: Composer for Extensions DistributionSergii Shymko: Magento 2: Composer for Extensions Distribution
Sergii Shymko: Magento 2: Composer for Extensions Distribution
 
Vortrag Ulrike Richter: ICONET in NRW
Vortrag Ulrike Richter: ICONET in NRWVortrag Ulrike Richter: ICONET in NRW
Vortrag Ulrike Richter: ICONET in NRW
 
merck 2Q05 Earnings Release
merck 	2Q05 Earnings Releasemerck 	2Q05 Earnings Release
merck 2Q05 Earnings Release
 
Conflict Prevention Due Diligence Negotiation & Consensus Building Strategies...
Conflict Prevention Due Diligence Negotiation & Consensus Building Strategies...Conflict Prevention Due Diligence Negotiation & Consensus Building Strategies...
Conflict Prevention Due Diligence Negotiation & Consensus Building Strategies...
 
Potipoti AW09 Cataloge
Potipoti AW09 CatalogePotipoti AW09 Cataloge
Potipoti AW09 Cataloge
 
Marc Egger: Text Analytics for Brand Research -Non-reactive Concept Mapping t...
Marc Egger: Text Analytics for Brand Research -Non-reactive Concept Mapping t...Marc Egger: Text Analytics for Brand Research -Non-reactive Concept Mapping t...
Marc Egger: Text Analytics for Brand Research -Non-reactive Concept Mapping t...
 
O Intermareal
O IntermarealO Intermareal
O Intermareal
 
custom mobile application development
custom mobile application developmentcustom mobile application development
custom mobile application development
 
Vicente ferrer
Vicente ferrerVicente ferrer
Vicente ferrer
 
Marketing, Publicidad y Analítica web - Master Avanzado
Marketing, Publicidad y Analítica web - Master AvanzadoMarketing, Publicidad y Analítica web - Master Avanzado
Marketing, Publicidad y Analítica web - Master Avanzado
 
Taller de fotografía con ojo de pez
Taller de fotografía con ojo de pezTaller de fotografía con ojo de pez
Taller de fotografía con ojo de pez
 
Ma no-presentation-2013
Ma no-presentation-2013Ma no-presentation-2013
Ma no-presentation-2013
 

Similar to Manuel Toniato e Simone Caretta: Migliorare le performance di ricerca con Elasticsearch

Luca Peressini: Integrare Apache Solr in Magento per migliorare la ricerca
Luca Peressini: Integrare Apache Solr in Magento per migliorare la ricercaLuca Peressini: Integrare Apache Solr in Magento per migliorare la ricerca
Luca Peressini: Integrare Apache Solr in Magento per migliorare la ricerca
WEBFORMAT srl
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
DotNetCampus
 
Smau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del ceroSmau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del cero
SMAU
 
Laboratorio di redazioni specialistiche 2011 - 4
Laboratorio di redazioni specialistiche 2011 - 4Laboratorio di redazioni specialistiche 2011 - 4
Laboratorio di redazioni specialistiche 2011 - 4
redazionispecialistiche
 
How I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven DesignHow I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven Design
Andrea Saltarello
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015
Codemotion
 

Similar to Manuel Toniato e Simone Caretta: Migliorare le performance di ricerca con Elasticsearch (20)

Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)Design Patterns - enterprise patterns (part I)
Design Patterns - enterprise patterns (part I)
 
Luca Peressini: Integrare Apache Solr in Magento per migliorare la ricerca
Luca Peressini: Integrare Apache Solr in Magento per migliorare la ricercaLuca Peressini: Integrare Apache Solr in Magento per migliorare la ricerca
Luca Peressini: Integrare Apache Solr in Magento per migliorare la ricerca
 
Integrare Apache Solr in Magento per migliorare la ricerca
Integrare Apache Solr in Magento per migliorare la ricercaIntegrare Apache Solr in Magento per migliorare la ricerca
Integrare Apache Solr in Magento per migliorare la ricerca
 
Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)
 
Training Signal Webtrends
Training Signal WebtrendsTraining Signal Webtrends
Training Signal Webtrends
 
Nicola Della Marina: Magento Frontend next level
Nicola Della Marina: Magento Frontend next levelNicola Della Marina: Magento Frontend next level
Nicola Della Marina: Magento Frontend next level
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
 
Domino e HTML5, #dd13
Domino e HTML5, #dd13Domino e HTML5, #dd13
Domino e HTML5, #dd13
 
Design Patterns - Enterprise Patterns (part 2)
Design Patterns - Enterprise Patterns (part 2)Design Patterns - Enterprise Patterns (part 2)
Design Patterns - Enterprise Patterns (part 2)
 
Power B: Cleaning data
Power B: Cleaning dataPower B: Cleaning data
Power B: Cleaning data
 
Magento: Oltre la configurazione standard di Google Analytics
Magento: Oltre la configurazione standard di Google AnalyticsMagento: Oltre la configurazione standard di Google Analytics
Magento: Oltre la configurazione standard di Google Analytics
 
Il web intelligente
Il web intelligenteIl web intelligente
Il web intelligente
 
Smau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del ceroSmau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del cero
 
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-servicePower BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
 
Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain model
 
Laboratorio di redazioni specialistiche 2011 - 4
Laboratorio di redazioni specialistiche 2011 - 4Laboratorio di redazioni specialistiche 2011 - 4
Laboratorio di redazioni specialistiche 2011 - 4
 
How I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven DesignHow I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven Design
 
Layered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRSLayered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRS
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015
 

More from Meet Magento Italy

Giulio Gargiullo - Strategie di marketing digitale per avviare l’e-commerce i...
Giulio Gargiullo - Strategie di marketing digitale per avviare l’e-commerce i...Giulio Gargiullo - Strategie di marketing digitale per avviare l’e-commerce i...
Giulio Gargiullo - Strategie di marketing digitale per avviare l’e-commerce i...
Meet Magento Italy
 

More from Meet Magento Italy (20)

Dirk Pinamonti - Come affrontare la sfida del nuovo mercato multicanale e del...
Dirk Pinamonti - Come affrontare la sfida del nuovo mercato multicanale e del...Dirk Pinamonti - Come affrontare la sfida del nuovo mercato multicanale e del...
Dirk Pinamonti - Come affrontare la sfida del nuovo mercato multicanale e del...
 
Vinai Kopp - How i develop M2 modules
Vinai Kopp - How i develop M2 modules Vinai Kopp - How i develop M2 modules
Vinai Kopp - How i develop M2 modules
 
Eugene Shaksuvarov - Tuning Magento 2 for Maximum Performance
Eugene Shaksuvarov - Tuning Magento 2 for Maximum PerformanceEugene Shaksuvarov - Tuning Magento 2 for Maximum Performance
Eugene Shaksuvarov - Tuning Magento 2 for Maximum Performance
 
Muliadi jeo - How to sell online in Indonesia
Muliadi jeo - How to sell online in IndonesiaMuliadi jeo - How to sell online in Indonesia
Muliadi jeo - How to sell online in Indonesia
 
Max Pronko - 10 migration mistakes from Magento 1 to Magento 2
Max Pronko - 10 migration mistakes from Magento 1 to Magento 2Max Pronko - 10 migration mistakes from Magento 1 to Magento 2
Max Pronko - 10 migration mistakes from Magento 1 to Magento 2
 
Alessandro La Ciura - Progettare la migliore integrazione tra live chat ed e-...
Alessandro La Ciura - Progettare la migliore integrazione tra live chat ed e-...Alessandro La Ciura - Progettare la migliore integrazione tra live chat ed e-...
Alessandro La Ciura - Progettare la migliore integrazione tra live chat ed e-...
 
Bodin - Hullin & Potencier - Magento Performance Profiling and Best Practices
Bodin - Hullin & Potencier - Magento Performance Profiling and Best PracticesBodin - Hullin & Potencier - Magento Performance Profiling and Best Practices
Bodin - Hullin & Potencier - Magento Performance Profiling and Best Practices
 
Giulio Gargiullo - Strategie di marketing digitale per avviare l’e-commerce i...
Giulio Gargiullo - Strategie di marketing digitale per avviare l’e-commerce i...Giulio Gargiullo - Strategie di marketing digitale per avviare l’e-commerce i...
Giulio Gargiullo - Strategie di marketing digitale per avviare l’e-commerce i...
 
Vinai Kopp - FPC Hole punching in Magento 2
Vinai Kopp - FPC Hole punching in Magento 2Vinai Kopp - FPC Hole punching in Magento 2
Vinai Kopp - FPC Hole punching in Magento 2
 
Jacopo Nardiello - From CI to Prod: Running Magento at scale with Kubernetes
Jacopo Nardiello - From CI to Prod: Running Magento at scale with KubernetesJacopo Nardiello - From CI to Prod: Running Magento at scale with Kubernetes
Jacopo Nardiello - From CI to Prod: Running Magento at scale with Kubernetes
 
James Zetlen - PWA Studio Integration…With You
James Zetlen - PWA Studio Integration…With YouJames Zetlen - PWA Studio Integration…With You
James Zetlen - PWA Studio Integration…With You
 
Talesh Seeparsan - The Hound of the Malwarevilles
Talesh Seeparsan - The Hound of the MalwarevillesTalesh Seeparsan - The Hound of the Malwarevilles
Talesh Seeparsan - The Hound of the Malwarevilles
 
Miguel Balparda - A day in support
Miguel Balparda - A day in supportMiguel Balparda - A day in support
Miguel Balparda - A day in support
 
Volodymyr Kublytskyi - Develop Product, Design Platform
Volodymyr Kublytskyi - Develop Product, Design PlatformVolodymyr Kublytskyi - Develop Product, Design Platform
Volodymyr Kublytskyi - Develop Product, Design Platform
 
Rosario Toscano - Processi di ottimizzazione per una crescita continua
Rosario Toscano - Processi di ottimizzazione per una crescita continuaRosario Toscano - Processi di ottimizzazione per una crescita continua
Rosario Toscano - Processi di ottimizzazione per una crescita continua
 
Henrik Feld Jakobsen - How to sell online Scandinavia
Henrik Feld Jakobsen - How to sell online ScandinaviaHenrik Feld Jakobsen - How to sell online Scandinavia
Henrik Feld Jakobsen - How to sell online Scandinavia
 
Rabia Qureshi - How to sell online in UK
Rabia Qureshi - How to sell online in UKRabia Qureshi - How to sell online in UK
Rabia Qureshi - How to sell online in UK
 
Matteo Schuerch - How to sell online in Switzerland
Matteo Schuerch - How to sell online in SwitzerlandMatteo Schuerch - How to sell online in Switzerland
Matteo Schuerch - How to sell online in Switzerland
 
Il data-driven nell’e-commerce: il caso studio Alessi
Il data-driven nell’e-commerce: il caso studio AlessiIl data-driven nell’e-commerce: il caso studio Alessi
Il data-driven nell’e-commerce: il caso studio Alessi
 
Philippe Bernou - Seamless omnichannel solutions with Magento order management
Philippe Bernou - Seamless omnichannel solutions with Magento order managementPhilippe Bernou - Seamless omnichannel solutions with Magento order management
Philippe Bernou - Seamless omnichannel solutions with Magento order management
 

Manuel Toniato e Simone Caretta: Migliorare le performance di ricerca con Elasticsearch

  • 1.
  • 4. develon / fullycommerce • Criticità della ricerca su Magento CE • Il progetto elasticsearch • Integrazione tra elasticsearch e Magento CE • mapping (fields, analyzers, boost) • infrastruttura • query • Renderizzazione dei risultati • E se usassimo elasticsearch per tutti i casi di navigazione layered? Outline
  • 5. develon / fullycommerce Voglio comprare un ago in questo pagliaio ovvero l’importanza della ricerca nell’ecommerce
  • 6. develon / fullycommerce Perché investire sull’internal search? • il 30% dei visitatori usa la ricerca interna (eConsultancy, 2012) • chi usa la ricerca è un visitatore di valore (conversion rate più alto del 70%-80%) • gli utenti si aspettano strumenti avanzati di ricerca (pertinenza, do you mean, autocomplete, instant search)
  • 7. develon / fullycommerce Perché investire sull’internal search? • grande vantaggio competitivo (Baymard Institute, 2014) • i dati raccolti con la ricerca interna sono fondamentali per il marketing
  • 8. develon / fullycommerce rilevanza performance prossimità La Ricerca in Magento CE • Like • Fulltext • Combine (Like+Fulltext)
  • 9. develon / fullycommerce Product or not product? Magento indicizza e ricerca solo i prodotti no categorie no pagine CMS no altri contenuti (wordpress, typo3, …)
  • 11. develon / fullycommerce elasticsearch • full-text search server basato su • utilizzato in produzione nel mercato • supportato dalla community (licenza apache 2) e dall’azienda omonima
  • 12. develon / fullycommerce Caratteristiche strutturali • distribuito, affidabile e scalabile
  • 13. develon / fullycommerce Caratteristiche interfaccia • restful api • schema free • query DSL curl -XPUT ‘http://elastic:9200/doc_it' -d ' { "settings": { "number_of_shards" : 5, "number_of_replicas" : 1, } }' curl -XPUT 'http://elastic:9200/doc_it/product' -d ' { "sku":"1775X59", "name":"DEAN AX®", "description":"Dean AX&reg; &egrave; pensato per ….", "id":"19050" }' curl -XGET 'http://elastic:9200/doc_it/product/_search' -d ' { "query": { "match" : { "name" : "DEAN" } } }'
  • 14. develon / fullycommerce Caratteristiche tecniche • (near) real time • real time analytics • optimistic version control • per operation persistence • interfaces: head, inquisitor, browser • molto altro …..
  • 15. develon / fullycommerce elasticsearch vs Solr • multitenancy as default • nativamente cloud oriented • supporto per documenti “strutturati” • possibilità di piani di supporto business • caratteristiche tecniche in continua evoluzione • interesse in crescita, community in crescita
  • 17. develon / fullycommerce Mapping • Attributi analyzed e attributi stored • Attributi base: sku, name, description, short_description • Attributi numerici: prezzo • Attributi gerarchici / ordinati: categorie • Attributi di view: lingua / store view • Altri contenuti • Immagini?
  • 18. develon / fullycommerce Mapping • quale analyzer scelgo per i vari attributi? • analysis = charFilter + tokenizer + tokenFilter { "analysis": { "analyzer": { "std_stemmed_it": { "char_filter": "html_strip", "filter": [ "it_stop", "lowercase", "it_stemmer" ], "tokenizer": "standard", "type": "custom" } }, "filter": { "it_stemmer": { "name": "light_italian", "type": "stemmer" }, "it_stop": { "name": "it_stop", "stopwords": "_italian_", "type": "stop" } } } }
  • 21. develon / fullycommerce Infrastruttura ETL • Indicizzazione bulk utilizzando ETL/ESB
  • 22. develon / fullycommerce Infrastruttura river • I data-pump di elasticsearch: i River • Indicizzazione in real-time usando RabbitMQ river <events> <catalog_product_save_after> <observers> <fullycommerce_reindex_product> <class>elasticsearch/observer</class> <method>productReindex</method> </fullycommerce_reindex_product> </observers> </catalog_product_save_after> </events>
  • 23. develon / fullycommerce Librerie PHP di connessione $qb = new ElasticaQueryBuilder(); $query=$qb->query() ->multi_match() ->setFields(array('name^2', 'description', 'sku^3')) ->setQuery($q); • Rest client + JSON handling • Elastica: approccio Object Oriented con query builder
  • 24. develon / fullycommerce “Hello world”: una semplice query di ricerca $this->_elasticaclient = new ElasticaClient(array( 'host' => 'localhost', 'port' => '9200' )); $search = new ElasticaSearch($this->_elasticaclient); $search->addIndex($this->_index)->addType($this->_type); $qb = new ElasticaQueryBuilder(); $query=$qb->query() ->multi_match() ->setFields(array('name^2', 'description', 'sku^3')) ->setQuery($q); $suggest = $qb->suggest() ->term('suggest_description', 'description') ->setText($q); $elastic_query=new ElasticaQuery(); $elastic_query->setQuery($query) ->setSuggest(new ElasticaSuggest($suggest)); $search->setQuery($elastic_query); $resultset=$search->search(); print_r($resultset->getResults()); if($resultset->hasSuggests()){ print_r($resultset->getSuggests()); }
  • 25. develon / fullycommerce { "query": { "filtered": { "query": { "bool": { "should": [ { "fuzzy_like_this": { "fields": [ "color_en", "color_it", "manufacturer_en", "manufacturer_it", "name_en", "name_it", "description_en", "description_it", "short_description_en", "short_description_it", "sku", "category_terms_en", "category_terms_it" ], "boost": 1, "like_text": "(scrpe puma)", "min_similarity": 0.7, "prefix_length": 0, "ignore_tf": false, "max_query_terms": 10 } • multi term query rewrite • template query • elasticsearch prevede 39 tipi di query a fronte dei 13 tipi previsti da Lucene. • La nostra scelta è stata di combinare una ricerca esatta (query_string) con una ricerca fuzzy (fuzzy_like_this), e poi filtrare per store Le query di elasticsearch
  • 30. develon / fullycommerce Come mostrare i risultati • Utilizzando le collection di Magento (filtro per product_id) $ids = $this->getSearchResultIds(); $this->addIdFilter($ids); • Renderizzando direttamente gli oggetti JSON restituiti da elasticsearch Vantaggi: non serve arricchimento, in automatico paginazione, ordinamento, ecc. Svantaggi: seconda query su DB (lentezza) Vantaggi: molto veloce Svantaggi: necessità di indicizzare i dati necessari per il template paginazione e ordinamento molto complicati Soluzione preferibile per l’autocomplete
  • 31. develon / fullycommerce E se usassimo elasticsearch per tutti i casi di layered navigation? • È la soluzione adottata dalla maggior parte dei moduli • Performance migliori? • Fragilità della soluzione!!! <config> <global> <blocks> <nanowebg_elasticsearch> <class>NanoWebG_ElasticSearch_Block</class> </nanowebg_elasticsearch> <catalog> <rewrite> <layer_view> NanoWebG_ElasticSearch_Block_Catalog_Layer_View </layer_view> </rewrite> </catalog> <catalogsearch> <rewrite> <layer> NanoWebG_ElasticSearch_Block_Catalogsearch_Layer </layer> </rewrite> </catalogsearch> </blocks> </global> </config>
  • 32. develon / fullycommerce Integrazioni esistenti • moltissimi progetti nati nell’ultimo anno
  • 33. develon / fullycommerce L’ecosistema elasticsearch Oltre la ricerca: ELK-stack • logstash: per centralizzare, elaborare e instradare i log • kibana: sistema di visualizzazione dati in real-time
  • 35. develon / fullycommerce References (1) Sulla ricerca interna nell’ecommerce • Why Ecommerce Stores Can't Afford to Ignore Site Search, di Barett Johnson, 4/11/2014, visitato il 27/2/2014 http://blog.swiftype.com/why-ecommerce-stores-cant-afford-to-ignore-site- search • The Current State Of E-Commerce Search, di Christian Holst, 18/08/2014, visitato il 27/2/2014 http://www.smashingmagazine.com/2014/08/18/the-current-state-of-e- commerce-search/ Elasticsearch • Il nuovo sito (lanciato il 10/3/2015) : https://www.elastic.co/ • Elastica: http://elastica.io/
  • 36. develon / fullycommerce References (2) Elasticsearch e Magento • BubbleShop Extension for Elasticsearch, https://www.bubbleshop.net/magento-elasticsearch.html • Qbox Elasticsearch Extension, http://www.magentocommerce.com/magento-connect/qbox- elasticsearch-extension.html • Johann Reinke Extension (versione preliminare di BubbleShop) https://github.com/jreinke/magento-elasticsearch • Carlo Tasca Extension (non utilizza Elastica) https://github.com/ctasca/magento-elasticsearch-module
  • 37. develon / fullycommerce Manuel Toniato manuel.toniato@fullycommerce.com https://www.linkedin.com/pub/manuel-toniato/45/7a/61b https://twitter.com/manuel_toniato Simone Caretta simone.caretta@develon.com https://www.linkedin.com/pub/simone-caretta/4/90b/383 https://plus.google.com/+SimoneCaretta/posts
  • 38. © 2013, Develon srl - Tutti i diritti riservati. Questo documento è protetto da copyright. Nessuna parte di esso può essere modificato, riprodotto o distribuito in qualunque forma o con qualunque mezzo, senza previa autorizzazione scritta di Develon srl. develon / fullycommerce www.develon.com - www.fullycommerce.com