Migrer une application existante vers Elasticsearch - Nuxeo Tour 2014 - workshop

Post on 18-Dec-2014

111 views 0 download

description

Atelier Deep Dive Nuxeo Tour 2014 par Michael Vachette

transcript

Migrer une application existante vers Elasticsearch Michaël Vachette

Hier …

Architecture

Nuxeo !Platform!

SQL !Database! FS!

Montée en charge

Nuxeo !Platform!

SQL !Database! FS!

Nuxeo !Platform!

Nuxeo !Platform!

Cluster

Montée en charge

Nuxeo !Platform!

SQL !Database! FS!

Nuxeo !Platform!

Nuxeo !Platform!

RAM/CPU

Cluster

Montée en charge

Nuxeo !Platform!

SQL !Database! FS!

Nuxeo !Platform!

Nuxeo !Platform!

RAM/CPU Distribuer les I/0

Cluster

Montée en charge

Nuxeo !Platform!

SQL !Database! FS!

Nuxeo !Platform!

Nuxeo !Platform!

RAM/CPU Distribuer les I/0

Cluster

DB: Les opérations coûteuses

•  Déplacer/copier/supprimer une arborescence

DB: Les opérations coûteuses

•  Déplacer/copier/supprimer une arborescence Ponctuel!

DB: Les opérations coûteuses

•  Déplacer/copier/supprimer une arborescence

•  La recherche

Ponctuel!

DB: Les opérations coûteuses

•  Déplacer/copier/supprimer une arborescence

•  La recherche

Ponctuel!

Régulier!

Recherche: limitations

•  Pas de possibilité de distribuer les requêtes sur plusieurs bases de données

Recherche: limitations

•  Pas de possibilité de distribuer les requêtes sur plusieurs bases de données

•  Toutes les bases de données ne proposent pas les mêmes fonctionnalités de recherche

Recherche: limitations

•  Pas de possibilité de distribuer les requêtes sur plusieurs bases de données

•  Toutes les bases de données ne proposent pas les mêmes fonctionnalités de recherche

•  Pas de facettes, synonymes, mots proches …

La solution:

Intégrer un moteur de recherche

elasticsearch : c’est quoi ?

•  Un moteur de recherche open-source

elasticsearch : c’est quoi ?

•  Un moteur de recherche open-source

•  Architecture distribuée

elasticsearch : c’est quoi ?

•  Un moteur de recherche open-source

•  Architecture distribuée

•  Pas de schéma de données

elasticsearch : c’est quoi ?

•  Un moteur de recherche open-source

•  Architecture distribuée

•  Pas de schéma de données

•  JSON over HTTP pour la communication

Architecture

Nuxeo !Platform!

SQL !Database! FS!

Elasticsearch!

Montée en charge

Nuxeo !Platform!

SQL !Database! FS!

Elasticsearch!

Elasticsearch!

Montée en charge

Nuxeo !Platform!

SQL !Database! FS!

Elasticsearch!

Elasticsearch!

Elasticsearch!

Intégration •  Requêtes en langage NXQL

Intégration •  Requêtes en langage NXQL

•  Réutilisation du concept de Page Provider

Intégration •  Requêtes en langage NXQL

•  Réutilisation du concept de Page Provider

•  Intégration transparente dans les Content Views

Intégration •  Requêtes en langage NXQL

•  Réutilisation du concept de Page Provider

•  Intégration transparente dans les Content Views

•  Les ACL sont indexées dans ES

Intégration •  Requêtes en langage NXQL

•  Réutilisation du concept de Page Provider

•  Intégration transparente dans les Content Views

•  Les ACL sont indexées dans ES

•  La configuration des index ES est indépendante de Nuxeo Platform

Performances

Comparaison DB / ES

Pour 1 milliard de documents

Les ajouts fonctionnels

Les facettes

Recherche plein texte

La prise en compte des:

• Caractères accentués

• Pluriels

• Apostrophes

Prochaines versions de Nuxeo

• Recherche par mots proches

• Extrait de document dans les résultats

… en fonction des retours d’expérience et des demandes clients

Installation

Nuxeo

Package Marketplace pour Nuxeo 5.8 et Nuxeo 6.0

Elasticsearch

http://www.elasticsearch.org/resources/

Configuration

Configuration

• Configuration de Nuxeo Platform

• Configuration de l’index nuxeo

Configuration Nuxeo Platform

Paramètre du fichier nuxeo.conf: # Name of the Elasticsearch index for Nuxeo documents elasticsearch.indexName=nuxeo

# Comma separated list of Elasticsearch nodes, if empty use a local in JVM node elasticsearch.addressList=host:9300

# Name of the Elasticsearch cluster to join elasticsearch.clusterName=nuxeoCluster

# Number of replicas (not for local node) elasticsearch.indexNumberOfReplicas=1

# Number of shards (not for local node) elasticsearch.indexNumberOfShards=5

# Name of the local node elasticsearch.nodeName=nuxeoNode

Configuration de l’index

•  Template Elasticsearch

• Deux configurations disponibles : •  français

•  anglais (défaut)

Configuration de l’index

Ces ateliers sont vraiment très intéressants.

Configuration de l’index

Ces ateliers sont vraiment très intéressants.

Analyzer!

Configuration de l’index

Ces ateliers sont vraiment très intéressants.

Analyzer!Tokenizer! Ces ateliers sont vraiment très intéressants

Configuration de l’index

Ces ateliers sont vraiment très intéressants.

Analyzer!Tokenizer! Ces ateliers sont vraiment très intéressants

stop words! ateliers vraiment très intéressants Cet est

Configuration de l’index

Ces ateliers sont vraiment très intéressants.

Analyzer!Tokenizer! Ces ateliers sont vraiment très intéressants

lower case !

stemmer!

ateliers vraiment très intéressants

ateli vraiment très intéressant

ascii folding! ateli vraiment tres interessant

stop words! ateliers vraiment très intéressants Cet est

Commandes utiles

Elasticsearch

Etat d'un nœud local

curl -XGET 'http://localhost:9200/_nodes?pretty'

curl -Method GET 'http://localhost:9200/_nodes?pretty'

Suppression d'un index

curl -XDELETE 'http://localhost:9200/nuxeo/'

curl -Method DELETE 'http://localhost:9200/nuxeo/'

Analyse d'un texte

curl -XPOST 'http://localhost:9200/nuxeo/_analyze?analyzer=fulltext&pretty' -d {'slide'}

curl -Method Post 'http://localhost:9200/nuxeo/_analyze?analyzer=fulltext&pretty' -d {'slide'}