Elasticsearch - Devoxx France 2012

11 253 vues

Publié le

Présentation d'Elasticsearch lors de Devoxx France 2012
Contenu en français
English translation available here : http://www.slideshare.net/dadoonet/elasticsearch-devoxx-france-2012-english-version

Publié dans : Technologie
6 commentaires
22 j’aime
Statistiques
Remarques
Aucun téléchargement
Vues
Nombre de vues
11 253
Sur SlideShare
0
Issues des intégrations
0
Intégrations
296
Actions
Partages
0
Téléchargements
189
Commentaires
6
J’aime
22
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • Enthousiasme.\nRemerciements.\n
  • Parcours :\n Ecole d'ingé à Brest, \n puis 3 ans en SSII, \n 3 ans chez SFR/Cegetel réseau de transmission (intranetisation du SI de supervision), \n 4 ans chez Vivendi Universal Net\n Depuis plus de 7 ans, je bosse pour la France à la douane pour le développement du SI, principalement\n Déclaration de douane en ligne (12 millions de marchandises déclarés import/export par an)\n Projet de gestion des contrôles douanier\nPassions : \n Ma famille\n Mon job : j'adore mon job\n Le mix occasionnel (sur mon compte twitter un lien vers mes podcasts)\nContacts :\n Twitter : dadoonet et animateur elasticsearchfr\n Email : david@pilato.fr\n
  • Points abordés :\nA quels besoins essaye t on de répondre ? A quoi servirait un moteur de recherche dans mon SI ?\nComment Elasticsearch répond à ces besoins et à bien d'autres encore\nDémo Live : indexation de messages Twitter ! Faites du bruit en twittant sur @devoxxfr et #elasticsearch\n
  • Description de ma propre expérience en arrivant en douane il y a 7 ans par un cas type de la recherche SQL classique.\n
  • \n
  • \n
  • \n
  • Faire remarquer le like avec des wildcards sur le champ commentaire très contre performant.\nTrès contre performant. Jusqu’à 500 000 documents, on arrivait encore à tenir la charge avec des temps de réponse de moins de 5 secondes.\n
  • Lorsqu’on a atteint le million de déclarations en douane, obligation d’enlever la fonctionnalité like pour faire seulement du égal à.\n\n
  • Parmi les moteurs existants, il y a depuis maintenant plus de 2 ans, Elasticsearch...\n
  • Parmi les moteurs existants, il y a depuis maintenant plus de 2 ans, Elasticsearch...\n
  • Parmi les moteurs existants, il y a depuis maintenant plus de 2 ans, Elasticsearch...\n
  • Principe fondamental : Ce sont vos données : ce sera votre recherche. Il n'y a que vous qui puissiez savoir ce que sémantiquement représentent vos données, comment les chercher et comment présenter les résultats de recherche.\n
  • Principe fondamental : Ce sont vos données : ce sera votre recherche. Il n'y a que vous qui puissiez savoir ce que sémantiquement représentent vos données, comment les chercher et comment présenter les résultats de recherche.\n
  • Moteur clairement NOSQL de son orientation Document\nBasé sur la formidable bibliothèque Lucene dont il masque la complexité Java via des services HTTP / REST / JSON standards. Voir aussi la conférence de vendredi à 14H30 la conférence de Majirus FANSI sur les fondements de Lucene.\nDe fait, s'utilise à partir de n'importe quelle technologie\nAjoute la couche cloud qui manquait à Lucene : distribution, partionnement, scalabilité pour en décupler d'avantage la puissance en autant d’instances de Lucene que nécessaire. \n\n\n
  • Moteur clairement NOSQL de son orientation Document\nBasé sur la formidable bibliothèque Lucene dont il masque la complexité Java via des services HTTP / REST / JSON standards. Voir aussi la conférence de vendredi à 14H30 la conférence de Majirus FANSI sur les fondements de Lucene.\nDe fait, s'utilise à partir de n'importe quelle technologie\nAjoute la couche cloud qui manquait à Lucene : distribution, partionnement, scalabilité pour en décupler d'avantage la puissance en autant d’instances de Lucene que nécessaire. \n\n\n
  • Moteur clairement NOSQL de son orientation Document\nBasé sur la formidable bibliothèque Lucene dont il masque la complexité Java via des services HTTP / REST / JSON standards. Voir aussi la conférence de vendredi à 14H30 la conférence de Majirus FANSI sur les fondements de Lucene.\nDe fait, s'utilise à partir de n'importe quelle technologie\nAjoute la couche cloud qui manquait à Lucene : distribution, partionnement, scalabilité pour en décupler d'avantage la puissance en autant d’instances de Lucene que nécessaire. \n\n\n
  • Moteur clairement NOSQL de son orientation Document\nBasé sur la formidable bibliothèque Lucene dont il masque la complexité Java via des services HTTP / REST / JSON standards. Voir aussi la conférence de vendredi à 14H30 la conférence de Majirus FANSI sur les fondements de Lucene.\nDe fait, s'utilise à partir de n'importe quelle technologie\nAjoute la couche cloud qui manquait à Lucene : distribution, partionnement, scalabilité pour en décupler d'avantage la puissance en autant d’instances de Lucene que nécessaire. \n\n\n
  • Moteur clairement NOSQL de son orientation Document\nBasé sur la formidable bibliothèque Lucene dont il masque la complexité Java via des services HTTP / REST / JSON standards. Voir aussi la conférence de vendredi à 14H30 la conférence de Majirus FANSI sur les fondements de Lucene.\nDe fait, s'utilise à partir de n'importe quelle technologie\nAjoute la couche cloud qui manquait à Lucene : distribution, partionnement, scalabilité pour en décupler d'avantage la puissance en autant d’instances de Lucene que nécessaire. \n\n\n
  • Moteur clairement NOSQL de son orientation Document\nBasé sur la formidable bibliothèque Lucene dont il masque la complexité Java via des services HTTP / REST / JSON standards. Voir aussi la conférence de vendredi à 14H30 la conférence de Majirus FANSI sur les fondements de Lucene.\nDe fait, s'utilise à partir de n'importe quelle technologie\nAjoute la couche cloud qui manquait à Lucene : distribution, partionnement, scalabilité pour en décupler d'avantage la puissance en autant d’instances de Lucene que nécessaire. \n\n\n
  • Si je devais résumer ES en quatre mots :\nIl est simple. Just run ! Pas de conf compliquée à faire. Comme la pub apple il y a une dizaine (ou vingtaine) : "1ère étape : branchez, 2ème étape, connectez, 3ème étape ...... il n'y a pas de troisième étape !"\nIl est efficace. On ajoute des nœuds et on bénéficie immédiatement de la réplication et de l'équilibrage de charge.\nIl est puissant. Basé sur Lucene, il parallélise ses traitements pour décupler la puissance de Lucene.\nIl est complet. Beaucoup de fonctionnalités natives ou sous forme de plugins.\nOn va voir ça de façon un peu plus précise maintenant…\n
  • Si je devais résumer ES en quatre mots :\nIl est simple. Just run ! Pas de conf compliquée à faire. Comme la pub apple il y a une dizaine (ou vingtaine) : "1ère étape : branchez, 2ème étape, connectez, 3ème étape ...... il n'y a pas de troisième étape !"\nIl est efficace. On ajoute des nœuds et on bénéficie immédiatement de la réplication et de l'équilibrage de charge.\nIl est puissant. Basé sur Lucene, il parallélise ses traitements pour décupler la puissance de Lucene.\nIl est complet. Beaucoup de fonctionnalités natives ou sous forme de plugins.\nOn va voir ça de façon un peu plus précise maintenant…\n
  • Si je devais résumer ES en quatre mots :\nIl est simple. Just run ! Pas de conf compliquée à faire. Comme la pub apple il y a une dizaine (ou vingtaine) : "1ère étape : branchez, 2ème étape, connectez, 3ème étape ...... il n'y a pas de troisième étape !"\nIl est efficace. On ajoute des nœuds et on bénéficie immédiatement de la réplication et de l'équilibrage de charge.\nIl est puissant. Basé sur Lucene, il parallélise ses traitements pour décupler la puissance de Lucene.\nIl est complet. Beaucoup de fonctionnalités natives ou sous forme de plugins.\nOn va voir ça de façon un peu plus précise maintenant…\n
  • Si je devais résumer ES en quatre mots :\nIl est simple. Just run ! Pas de conf compliquée à faire. Comme la pub apple il y a une dizaine (ou vingtaine) : "1ère étape : branchez, 2ème étape, connectez, 3ème étape ...... il n'y a pas de troisième étape !"\nIl est efficace. On ajoute des nœuds et on bénéficie immédiatement de la réplication et de l'équilibrage de charge.\nIl est puissant. Basé sur Lucene, il parallélise ses traitements pour décupler la puissance de Lucene.\nIl est complet. Beaucoup de fonctionnalités natives ou sous forme de plugins.\nOn va voir ça de façon un peu plus précise maintenant…\n
  • Un Document au sens NoSQL (tout est JSON dans Elasticsearch)\nPenser DOCUMENT ! Et non penser à l’organisation technique de ces documents (jointures, données de référence, ...).\nQUE CHERCHENT MES UTILISATEURS : \ndes produits ? \ndes logs des serveurs, \ndes forums ou des discussions dans des forums ?\n
  • Un Document au sens NoSQL (tout est JSON dans Elasticsearch)\nPenser DOCUMENT ! Et non penser à l’organisation technique de ces documents (jointures, données de référence, ...).\nQUE CHERCHENT MES UTILISATEURS : \ndes produits ? \ndes logs des serveurs, \ndes forums ou des discussions dans des forums ?\n
  • Un Document au sens NoSQL (tout est JSON dans Elasticsearch)\nPenser DOCUMENT ! Et non penser à l’organisation technique de ces documents (jointures, données de référence, ...).\nQUE CHERCHENT MES UTILISATEURS : \ndes produits ? \ndes logs des serveurs, \ndes forums ou des discussions dans des forums ?\n
  • Un Document au sens NoSQL (tout est JSON dans Elasticsearch)\nPenser DOCUMENT ! Et non penser à l’organisation technique de ces documents (jointures, données de référence, ...).\nQUE CHERCHENT MES UTILISATEURS : \ndes produits ? \ndes logs des serveurs, \ndes forums ou des discussions dans des forums ?\n
  • Un Document au sens NoSQL (tout est JSON dans Elasticsearch)\nPenser DOCUMENT ! Et non penser à l’organisation technique de ces documents (jointures, données de référence, ...).\nQUE CHERCHENT MES UTILISATEURS : \ndes produits ? \ndes logs des serveurs, \ndes forums ou des discussions dans des forums ?\n
  • Maintenant que nous avons ces bases, commençons par indexer un document…\n\n
  • Maintenant que nous avons ces bases, commençons par indexer un document…\n\n
  • Maintenant que nous avons ces bases, commençons par indexer un document…\n\n
  • Maintenant que nous avons ces bases, commençons par indexer un document…\n\n
  • Maintenant que nous avons ces bases, commençons par indexer un document…\n\n
  • Maintenant que nous avons ces bases, commençons par indexer un document…\n\n
  • Maintenant que nous avons ces bases, commençons par indexer un document…\n\n
  • Maintenant que nous avons ces bases, commençons par indexer un document…\n\n
  • Maintenant que nous avons ces bases, commençons par indexer un document…\n\n
  • Maintenant que nous avons ces bases, commençons par indexer un document…\n\n
  • Maintenant que nous avons ces bases, commençons par indexer un document…\n\n
  • Maintenant que nous avons ces bases, commençons par indexer un document…\n\n
  • On indexe notre TWEET. ES nous répond que c'est OK. Il faut imaginer qu’on vient juste de démarrer un noeud elasticsearch et qu’on n’a absolument rien configuré. La commande est juste un PUT en CURL.\nES créé l’index, le type et trouve tout seul le mapping correspondant à chaque champ. Des chaines de caractères, des dates, des booléens, des nombres, des tableaux, des objets, ...\nVous pouvez définir votre propre mapping pour chaque champ ainsi que des propriétés d’indexation. Par exemple, vous pourriez indiquer à Elasticsearch que le champ text est à analyser en FRANCAIS et donc qu’il faut ignorer les mots comme un, une, le, la, ...\nParmi les mappings possibles, il existe aussi la possibilité d’envoyer des documents PDF, oOo ou autres dans un champ texte en les encodant en BASE64. ES indexera alors automatiquement le contenu. Très puissant.\n
  • Un cas très simple de recherche : en général, on commence tous par là !\nOn cherche le mot clé elasticsearch\nES nous ramène un document JSON en retour qui contient :\nLe nb total de documents trouvés\nUn tableau contenant les 10 premiers documents les plus pertinents avec pour chaque document :\n Ses coordonnées (dans quel index, quel est le type et quel est l'ID)\n Son score (autrement dit sa pertinence relative par rapport à d'autres documents trouvés)\n Et surtout : directement le source du document JSON que vous avez indexé ! Pas besoin de retourner dans votre système d'information source pour afficher le résultat aux utilisateurs. Vous avez tout sous la main !\n
  • Un cas très simple de recherche : en général, on commence tous par là !\nOn cherche le mot clé elasticsearch\nES nous ramène un document JSON en retour qui contient :\nLe nb total de documents trouvés\nUn tableau contenant les 10 premiers documents les plus pertinents avec pour chaque document :\n Ses coordonnées (dans quel index, quel est le type et quel est l'ID)\n Son score (autrement dit sa pertinence relative par rapport à d'autres documents trouvés)\n Et surtout : directement le source du document JSON que vous avez indexé ! Pas besoin de retourner dans votre système d'information source pour afficher le résultat aux utilisateurs. Vous avez tout sous la main !\n
  • Un cas très simple de recherche : en général, on commence tous par là !\nOn cherche le mot clé elasticsearch\nES nous ramène un document JSON en retour qui contient :\nLe nb total de documents trouvés\nUn tableau contenant les 10 premiers documents les plus pertinents avec pour chaque document :\n Ses coordonnées (dans quel index, quel est le type et quel est l'ID)\n Son score (autrement dit sa pertinence relative par rapport à d'autres documents trouvés)\n Et surtout : directement le source du document JSON que vous avez indexé ! Pas besoin de retourner dans votre système d'information source pour afficher le résultat aux utilisateurs. Vous avez tout sous la main !\n
  • Un cas très simple de recherche : en général, on commence tous par là !\nOn cherche le mot clé elasticsearch\nES nous ramène un document JSON en retour qui contient :\nLe nb total de documents trouvés\nUn tableau contenant les 10 premiers documents les plus pertinents avec pour chaque document :\n Ses coordonnées (dans quel index, quel est le type et quel est l'ID)\n Son score (autrement dit sa pertinence relative par rapport à d'autres documents trouvés)\n Et surtout : directement le source du document JSON que vous avez indexé ! Pas besoin de retourner dans votre système d'information source pour afficher le résultat aux utilisateurs. Vous avez tout sous la main !\n
  • Un cas très simple de recherche : en général, on commence tous par là !\nOn cherche le mot clé elasticsearch\nES nous ramène un document JSON en retour qui contient :\nLe nb total de documents trouvés\nUn tableau contenant les 10 premiers documents les plus pertinents avec pour chaque document :\n Ses coordonnées (dans quel index, quel est le type et quel est l'ID)\n Son score (autrement dit sa pertinence relative par rapport à d'autres documents trouvés)\n Et surtout : directement le source du document JSON que vous avez indexé ! Pas besoin de retourner dans votre système d'information source pour afficher le résultat aux utilisateurs. Vous avez tout sous la main !\n
  • Un cas très simple de recherche : en général, on commence tous par là !\nOn cherche le mot clé elasticsearch\nES nous ramène un document JSON en retour qui contient :\nLe nb total de documents trouvés\nUn tableau contenant les 10 premiers documents les plus pertinents avec pour chaque document :\n Ses coordonnées (dans quel index, quel est le type et quel est l'ID)\n Son score (autrement dit sa pertinence relative par rapport à d'autres documents trouvés)\n Et surtout : directement le source du document JSON que vous avez indexé ! Pas besoin de retourner dans votre système d'information source pour afficher le résultat aux utilisateurs. Vous avez tout sous la main !\n
  • Un cas très simple de recherche : en général, on commence tous par là !\nOn cherche le mot clé elasticsearch\nES nous ramène un document JSON en retour qui contient :\nLe nb total de documents trouvés\nUn tableau contenant les 10 premiers documents les plus pertinents avec pour chaque document :\n Ses coordonnées (dans quel index, quel est le type et quel est l'ID)\n Son score (autrement dit sa pertinence relative par rapport à d'autres documents trouvés)\n Et surtout : directement le source du document JSON que vous avez indexé ! Pas besoin de retourner dans votre système d'information source pour afficher le résultat aux utilisateurs. Vous avez tout sous la main !\n
  • Un cas très simple de recherche : en général, on commence tous par là !\nOn cherche le mot clé elasticsearch\nES nous ramène un document JSON en retour qui contient :\nLe nb total de documents trouvés\nUn tableau contenant les 10 premiers documents les plus pertinents avec pour chaque document :\n Ses coordonnées (dans quel index, quel est le type et quel est l'ID)\n Son score (autrement dit sa pertinence relative par rapport à d'autres documents trouvés)\n Et surtout : directement le source du document JSON que vous avez indexé ! Pas besoin de retourner dans votre système d'information source pour afficher le résultat aux utilisateurs. Vous avez tout sous la main !\n
  • Il est possible évidemment de faire des recherches beaucoup plus complexes…\n
  • Il est possible évidemment de faire des recherches beaucoup plus complexes…\n
  • Il est possible évidemment de faire des recherches beaucoup plus complexes…\n
  • Il est possible évidemment de faire des recherches beaucoup plus complexes…\n
  • Il est possible évidemment de faire des recherches beaucoup plus complexes…\n
  • Il existe pour cela le langage QueryDSL :\nMatch all : ramène tous les résultats de mon cluster, de mon index ou de mon type.\nQueryString : très intéressant pour passer des requêtes type Lucene avec des + pour rendre obligatoire un terme ou – pour en exclure)\nTerm : recherche d'un terme sans analyser le terme passé en argument\nText : recherche d'un texte qui sera analysé (donc les mots inutiles seront exclus)\nWildcard : joker\nBool : permet de combiner des critères : avec MUST : DOIT, MUST NOT : NE DOIT PAS, ou SHOULD : CA SERAIT BIEN SI IL Y ÉTAIT…\nRange : recherche dans un intervalle de valeurs (on l'a vu avec les dates)\nPrefix : recherche de ce qui commence par : très pratique pour l'autocompletion car rapide en plus\nFiltered : on vient de le voir sur le slide d'avant\nFuzzy like this : recherche par vraisemblance de termes. Il va prendre notre mot et en générer d'autres ressemblants puis faire la recherche.\nMore like this : Dans l'idée, cela permet de trouver des documents ressemblants à d'autres\n\nNous avons donc abordé jusqu'à présent : la création de documents, le mapping et la recherche.\nPour alimenter Elasticsearch, il faut aller puiser du contenu dans votre SI.\n\n\n
  • Il existe pour cela le langage QueryDSL :\nMatch all : ramène tous les résultats de mon cluster, de mon index ou de mon type.\nQueryString : très intéressant pour passer des requêtes type Lucene avec des + pour rendre obligatoire un terme ou – pour en exclure)\nTerm : recherche d'un terme sans analyser le terme passé en argument\nText : recherche d'un texte qui sera analysé (donc les mots inutiles seront exclus)\nWildcard : joker\nBool : permet de combiner des critères : avec MUST : DOIT, MUST NOT : NE DOIT PAS, ou SHOULD : CA SERAIT BIEN SI IL Y ÉTAIT…\nRange : recherche dans un intervalle de valeurs (on l'a vu avec les dates)\nPrefix : recherche de ce qui commence par : très pratique pour l'autocompletion car rapide en plus\nFiltered : on vient de le voir sur le slide d'avant\nFuzzy like this : recherche par vraisemblance de termes. Il va prendre notre mot et en générer d'autres ressemblants puis faire la recherche.\nMore like this : Dans l'idée, cela permet de trouver des documents ressemblants à d'autres\n\nNous avons donc abordé jusqu'à présent : la création de documents, le mapping et la recherche.\nPour alimenter Elasticsearch, il faut aller puiser du contenu dans votre SI.\n\n\n
  • Il existe pour cela le langage QueryDSL :\nMatch all : ramène tous les résultats de mon cluster, de mon index ou de mon type.\nQueryString : très intéressant pour passer des requêtes type Lucene avec des + pour rendre obligatoire un terme ou – pour en exclure)\nTerm : recherche d'un terme sans analyser le terme passé en argument\nText : recherche d'un texte qui sera analysé (donc les mots inutiles seront exclus)\nWildcard : joker\nBool : permet de combiner des critères : avec MUST : DOIT, MUST NOT : NE DOIT PAS, ou SHOULD : CA SERAIT BIEN SI IL Y ÉTAIT…\nRange : recherche dans un intervalle de valeurs (on l'a vu avec les dates)\nPrefix : recherche de ce qui commence par : très pratique pour l'autocompletion car rapide en plus\nFiltered : on vient de le voir sur le slide d'avant\nFuzzy like this : recherche par vraisemblance de termes. Il va prendre notre mot et en générer d'autres ressemblants puis faire la recherche.\nMore like this : Dans l'idée, cela permet de trouver des documents ressemblants à d'autres\n\nNous avons donc abordé jusqu'à présent : la création de documents, le mapping et la recherche.\nPour alimenter Elasticsearch, il faut aller puiser du contenu dans votre SI.\n\n\n
  • Il existe pour cela le langage QueryDSL :\nMatch all : ramène tous les résultats de mon cluster, de mon index ou de mon type.\nQueryString : très intéressant pour passer des requêtes type Lucene avec des + pour rendre obligatoire un terme ou – pour en exclure)\nTerm : recherche d'un terme sans analyser le terme passé en argument\nText : recherche d'un texte qui sera analysé (donc les mots inutiles seront exclus)\nWildcard : joker\nBool : permet de combiner des critères : avec MUST : DOIT, MUST NOT : NE DOIT PAS, ou SHOULD : CA SERAIT BIEN SI IL Y ÉTAIT…\nRange : recherche dans un intervalle de valeurs (on l'a vu avec les dates)\nPrefix : recherche de ce qui commence par : très pratique pour l'autocompletion car rapide en plus\nFiltered : on vient de le voir sur le slide d'avant\nFuzzy like this : recherche par vraisemblance de termes. Il va prendre notre mot et en générer d'autres ressemblants puis faire la recherche.\nMore like this : Dans l'idée, cela permet de trouver des documents ressemblants à d'autres\n\nNous avons donc abordé jusqu'à présent : la création de documents, le mapping et la recherche.\nPour alimenter Elasticsearch, il faut aller puiser du contenu dans votre SI.\n\n\n
  • Il existe pour cela le langage QueryDSL :\nMatch all : ramène tous les résultats de mon cluster, de mon index ou de mon type.\nQueryString : très intéressant pour passer des requêtes type Lucene avec des + pour rendre obligatoire un terme ou – pour en exclure)\nTerm : recherche d'un terme sans analyser le terme passé en argument\nText : recherche d'un texte qui sera analysé (donc les mots inutiles seront exclus)\nWildcard : joker\nBool : permet de combiner des critères : avec MUST : DOIT, MUST NOT : NE DOIT PAS, ou SHOULD : CA SERAIT BIEN SI IL Y ÉTAIT…\nRange : recherche dans un intervalle de valeurs (on l'a vu avec les dates)\nPrefix : recherche de ce qui commence par : très pratique pour l'autocompletion car rapide en plus\nFiltered : on vient de le voir sur le slide d'avant\nFuzzy like this : recherche par vraisemblance de termes. Il va prendre notre mot et en générer d'autres ressemblants puis faire la recherche.\nMore like this : Dans l'idée, cela permet de trouver des documents ressemblants à d'autres\n\nNous avons donc abordé jusqu'à présent : la création de documents, le mapping et la recherche.\nPour alimenter Elasticsearch, il faut aller puiser du contenu dans votre SI.\n\n\n
  • Il existe pour cela le langage QueryDSL :\nMatch all : ramène tous les résultats de mon cluster, de mon index ou de mon type.\nQueryString : très intéressant pour passer des requêtes type Lucene avec des + pour rendre obligatoire un terme ou – pour en exclure)\nTerm : recherche d'un terme sans analyser le terme passé en argument\nText : recherche d'un texte qui sera analysé (donc les mots inutiles seront exclus)\nWildcard : joker\nBool : permet de combiner des critères : avec MUST : DOIT, MUST NOT : NE DOIT PAS, ou SHOULD : CA SERAIT BIEN SI IL Y ÉTAIT…\nRange : recherche dans un intervalle de valeurs (on l'a vu avec les dates)\nPrefix : recherche de ce qui commence par : très pratique pour l'autocompletion car rapide en plus\nFiltered : on vient de le voir sur le slide d'avant\nFuzzy like this : recherche par vraisemblance de termes. Il va prendre notre mot et en générer d'autres ressemblants puis faire la recherche.\nMore like this : Dans l'idée, cela permet de trouver des documents ressemblants à d'autres\n\nNous avons donc abordé jusqu'à présent : la création de documents, le mapping et la recherche.\nPour alimenter Elasticsearch, il faut aller puiser du contenu dans votre SI.\n\n\n
  • Il existe pour cela le langage QueryDSL :\nMatch all : ramène tous les résultats de mon cluster, de mon index ou de mon type.\nQueryString : très intéressant pour passer des requêtes type Lucene avec des + pour rendre obligatoire un terme ou – pour en exclure)\nTerm : recherche d'un terme sans analyser le terme passé en argument\nText : recherche d'un texte qui sera analysé (donc les mots inutiles seront exclus)\nWildcard : joker\nBool : permet de combiner des critères : avec MUST : DOIT, MUST NOT : NE DOIT PAS, ou SHOULD : CA SERAIT BIEN SI IL Y ÉTAIT…\nRange : recherche dans un intervalle de valeurs (on l'a vu avec les dates)\nPrefix : recherche de ce qui commence par : très pratique pour l'autocompletion car rapide en plus\nFiltered : on vient de le voir sur le slide d'avant\nFuzzy like this : recherche par vraisemblance de termes. Il va prendre notre mot et en générer d'autres ressemblants puis faire la recherche.\nMore like this : Dans l'idée, cela permet de trouver des documents ressemblants à d'autres\n\nNous avons donc abordé jusqu'à présent : la création de documents, le mapping et la recherche.\nPour alimenter Elasticsearch, il faut aller puiser du contenu dans votre SI.\n\n\n
  • Il existe pour cela le langage QueryDSL :\nMatch all : ramène tous les résultats de mon cluster, de mon index ou de mon type.\nQueryString : très intéressant pour passer des requêtes type Lucene avec des + pour rendre obligatoire un terme ou – pour en exclure)\nTerm : recherche d'un terme sans analyser le terme passé en argument\nText : recherche d'un texte qui sera analysé (donc les mots inutiles seront exclus)\nWildcard : joker\nBool : permet de combiner des critères : avec MUST : DOIT, MUST NOT : NE DOIT PAS, ou SHOULD : CA SERAIT BIEN SI IL Y ÉTAIT…\nRange : recherche dans un intervalle de valeurs (on l'a vu avec les dates)\nPrefix : recherche de ce qui commence par : très pratique pour l'autocompletion car rapide en plus\nFiltered : on vient de le voir sur le slide d'avant\nFuzzy like this : recherche par vraisemblance de termes. Il va prendre notre mot et en générer d'autres ressemblants puis faire la recherche.\nMore like this : Dans l'idée, cela permet de trouver des documents ressemblants à d'autres\n\nNous avons donc abordé jusqu'à présent : la création de documents, le mapping et la recherche.\nPour alimenter Elasticsearch, il faut aller puiser du contenu dans votre SI.\n\n\n
  • Il existe pour cela le langage QueryDSL :\nMatch all : ramène tous les résultats de mon cluster, de mon index ou de mon type.\nQueryString : très intéressant pour passer des requêtes type Lucene avec des + pour rendre obligatoire un terme ou – pour en exclure)\nTerm : recherche d'un terme sans analyser le terme passé en argument\nText : recherche d'un texte qui sera analysé (donc les mots inutiles seront exclus)\nWildcard : joker\nBool : permet de combiner des critères : avec MUST : DOIT, MUST NOT : NE DOIT PAS, ou SHOULD : CA SERAIT BIEN SI IL Y ÉTAIT…\nRange : recherche dans un intervalle de valeurs (on l'a vu avec les dates)\nPrefix : recherche de ce qui commence par : très pratique pour l'autocompletion car rapide en plus\nFiltered : on vient de le voir sur le slide d'avant\nFuzzy like this : recherche par vraisemblance de termes. Il va prendre notre mot et en générer d'autres ressemblants puis faire la recherche.\nMore like this : Dans l'idée, cela permet de trouver des documents ressemblants à d'autres\n\nNous avons donc abordé jusqu'à présent : la création de documents, le mapping et la recherche.\nPour alimenter Elasticsearch, il faut aller puiser du contenu dans votre SI.\n\n\n
  • Il existe pour cela le langage QueryDSL :\nMatch all : ramène tous les résultats de mon cluster, de mon index ou de mon type.\nQueryString : très intéressant pour passer des requêtes type Lucene avec des + pour rendre obligatoire un terme ou – pour en exclure)\nTerm : recherche d'un terme sans analyser le terme passé en argument\nText : recherche d'un texte qui sera analysé (donc les mots inutiles seront exclus)\nWildcard : joker\nBool : permet de combiner des critères : avec MUST : DOIT, MUST NOT : NE DOIT PAS, ou SHOULD : CA SERAIT BIEN SI IL Y ÉTAIT…\nRange : recherche dans un intervalle de valeurs (on l'a vu avec les dates)\nPrefix : recherche de ce qui commence par : très pratique pour l'autocompletion car rapide en plus\nFiltered : on vient de le voir sur le slide d'avant\nFuzzy like this : recherche par vraisemblance de termes. Il va prendre notre mot et en générer d'autres ressemblants puis faire la recherche.\nMore like this : Dans l'idée, cela permet de trouver des documents ressemblants à d'autres\n\nNous avons donc abordé jusqu'à présent : la création de documents, le mapping et la recherche.\nPour alimenter Elasticsearch, il faut aller puiser du contenu dans votre SI.\n\n\n
  • Il existe pour cela le langage QueryDSL :\nMatch all : ramène tous les résultats de mon cluster, de mon index ou de mon type.\nQueryString : très intéressant pour passer des requêtes type Lucene avec des + pour rendre obligatoire un terme ou – pour en exclure)\nTerm : recherche d'un terme sans analyser le terme passé en argument\nText : recherche d'un texte qui sera analysé (donc les mots inutiles seront exclus)\nWildcard : joker\nBool : permet de combiner des critères : avec MUST : DOIT, MUST NOT : NE DOIT PAS, ou SHOULD : CA SERAIT BIEN SI IL Y ÉTAIT…\nRange : recherche dans un intervalle de valeurs (on l'a vu avec les dates)\nPrefix : recherche de ce qui commence par : très pratique pour l'autocompletion car rapide en plus\nFiltered : on vient de le voir sur le slide d'avant\nFuzzy like this : recherche par vraisemblance de termes. Il va prendre notre mot et en générer d'autres ressemblants puis faire la recherche.\nMore like this : Dans l'idée, cela permet de trouver des documents ressemblants à d'autres\n\nNous avons donc abordé jusqu'à présent : la création de documents, le mapping et la recherche.\nPour alimenter Elasticsearch, il faut aller puiser du contenu dans votre SI.\n\n\n
  • Il existe pour cela le langage QueryDSL :\nMatch all : ramène tous les résultats de mon cluster, de mon index ou de mon type.\nQueryString : très intéressant pour passer des requêtes type Lucene avec des + pour rendre obligatoire un terme ou – pour en exclure)\nTerm : recherche d'un terme sans analyser le terme passé en argument\nText : recherche d'un texte qui sera analysé (donc les mots inutiles seront exclus)\nWildcard : joker\nBool : permet de combiner des critères : avec MUST : DOIT, MUST NOT : NE DOIT PAS, ou SHOULD : CA SERAIT BIEN SI IL Y ÉTAIT…\nRange : recherche dans un intervalle de valeurs (on l'a vu avec les dates)\nPrefix : recherche de ce qui commence par : très pratique pour l'autocompletion car rapide en plus\nFiltered : on vient de le voir sur le slide d'avant\nFuzzy like this : recherche par vraisemblance de termes. Il va prendre notre mot et en générer d'autres ressemblants puis faire la recherche.\nMore like this : Dans l'idée, cela permet de trouver des documents ressemblants à d'autres\n\nNous avons donc abordé jusqu'à présent : la création de documents, le mapping et la recherche.\nPour alimenter Elasticsearch, il faut aller puiser du contenu dans votre SI.\n\n\n
  • Il existe pour cela le langage QueryDSL :\nMatch all : ramène tous les résultats de mon cluster, de mon index ou de mon type.\nQueryString : très intéressant pour passer des requêtes type Lucene avec des + pour rendre obligatoire un terme ou – pour en exclure)\nTerm : recherche d'un terme sans analyser le terme passé en argument\nText : recherche d'un texte qui sera analysé (donc les mots inutiles seront exclus)\nWildcard : joker\nBool : permet de combiner des critères : avec MUST : DOIT, MUST NOT : NE DOIT PAS, ou SHOULD : CA SERAIT BIEN SI IL Y ÉTAIT…\nRange : recherche dans un intervalle de valeurs (on l'a vu avec les dates)\nPrefix : recherche de ce qui commence par : très pratique pour l'autocompletion car rapide en plus\nFiltered : on vient de le voir sur le slide d'avant\nFuzzy like this : recherche par vraisemblance de termes. Il va prendre notre mot et en générer d'autres ressemblants puis faire la recherche.\nMore like this : Dans l'idée, cela permet de trouver des documents ressemblants à d'autres\n\nNous avons donc abordé jusqu'à présent : la création de documents, le mapping et la recherche.\nPour alimenter Elasticsearch, il faut aller puiser du contenu dans votre SI.\n\n\n
  • Principe : propager un contenu en évolution permanente vers Elasticsearch\nL'image est : "les rivières de données qui se déversent dans le fleuve de la recherche"\n\n
  • Principe : propager un contenu en évolution permanente vers Elasticsearch\nL'image est : "les rivières de données qui se déversent dans le fleuve de la recherche"\n\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Plus sérieusement, aborde un des points que je préfère de ES : l’analyse des données en temps réel\n
  • Regarder ses données sous un autre angle. Les présenter sous des facettes différentes...\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Beaucoup d’autres type de facettes existent comme par exemple geodistance qui permet de calculer le nombre d’éléments autour de moi dans un rayon de 10, 20 ou 50 km\nUn système très puissant qu’on peut donc retrouver sur les sites marchands\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Fiche entreprise avec liste des contrôles douaniers\nDifférentes facettes et la liste des résultats en bas\nUn clic sur non conforme : ajout critère, relance recherche, c-a-d, nouveaux résultats et nouvelles facettes.\n
  • Fiche entreprise avec liste des contrôles douaniers\nDifférentes facettes et la liste des résultats en bas\nUn clic sur non conforme : ajout critère, relance recherche, c-a-d, nouveaux résultats et nouvelles facettes.\n
  • Fiche entreprise avec liste des contrôles douaniers\nDifférentes facettes et la liste des résultats en bas\nUn clic sur non conforme : ajout critère, relance recherche, c-a-d, nouveaux résultats et nouvelles facettes.\n
  • Fiche entreprise avec liste des contrôles douaniers\nDifférentes facettes et la liste des résultats en bas\nUn clic sur non conforme : ajout critère, relance recherche, c-a-d, nouveaux résultats et nouvelles facettes.\n
  • Fiche entreprise avec liste des contrôles douaniers\nDifférentes facettes et la liste des résultats en bas\nUn clic sur non conforme : ajout critère, relance recherche, c-a-d, nouveaux résultats et nouvelles facettes.\n
  • Fiche entreprise avec liste des contrôles douaniers\nDifférentes facettes et la liste des résultats en bas\nUn clic sur non conforme : ajout critère, relance recherche, c-a-d, nouveaux résultats et nouvelles facettes.\n
  • Fiche entreprise avec liste des contrôles douaniers\nDifférentes facettes et la liste des résultats en bas\nUn clic sur non conforme : ajout critère, relance recherche, c-a-d, nouveaux résultats et nouvelles facettes.\n
  • Fiche entreprise avec liste des contrôles douaniers\nDifférentes facettes et la liste des résultats en bas\nUn clic sur non conforme : ajout critère, relance recherche, c-a-d, nouveaux résultats et nouvelles facettes.\n
  • Fiche entreprise avec liste des contrôles douaniers\nDifférentes facettes et la liste des résultats en bas\nUn clic sur non conforme : ajout critère, relance recherche, c-a-d, nouveaux résultats et nouvelles facettes.\n
  • Fiche entreprise avec liste des contrôles douaniers\nDifférentes facettes et la liste des résultats en bas\nUn clic sur non conforme : ajout critère, relance recherche, c-a-d, nouveaux résultats et nouvelles facettes.\n
  • Ici, on pourra observer que les 6 cas de fraude ont été trouvés en décembre 2010, Janvier, Octobre 2011 et Mars 2012.\n
  • Ici, on pourra observer que les 6 cas de fraude ont été trouvés en décembre 2010, Janvier, Octobre 2011 et Mars 2012.\n
  • Profite de l’indexation permanente de ES sans dégradation des performances de la recherche\nPour présenter des résultats en temps presque réel. Démo twitter.\n\n
  • Et nous allons vérifier si nous (ou plutôt si VOUS) avez fait du bruit sur twitter…\n\n\n
  • Vous avez donc twitté à fond pendant toute cette conférence. Ces tweets sont hébergés chez Twitter qui met à notre disposition une API streaming qui permet d'écouter en permanence le bruit de fond (the hoose).\nPour cela, j'ai pris une machine chez Amazon sur laquelle j'ai installé ES.\nJ'ai ajouté le plugin twitter et j'ai créé une rivière twitter qui écoute ce flux de tweets en filtrant sur le mot devoxxfr.\nAinsi depuis fin Mars, le contenu devoxxfr se déverse dans Elasticsearch.\nIl suffit ensuite de réaliser une petite application d'analyse. J'ai fait ça en jQuery.\n\n
  • Vous avez donc twitté à fond pendant toute cette conférence. Ces tweets sont hébergés chez Twitter qui met à notre disposition une API streaming qui permet d'écouter en permanence le bruit de fond (the hoose).\nPour cela, j'ai pris une machine chez Amazon sur laquelle j'ai installé ES.\nJ'ai ajouté le plugin twitter et j'ai créé une rivière twitter qui écoute ce flux de tweets en filtrant sur le mot devoxxfr.\nAinsi depuis fin Mars, le contenu devoxxfr se déverse dans Elasticsearch.\nIl suffit ensuite de réaliser une petite application d'analyse. J'ai fait ça en jQuery.\n\n
  • Vous avez donc twitté à fond pendant toute cette conférence. Ces tweets sont hébergés chez Twitter qui met à notre disposition une API streaming qui permet d'écouter en permanence le bruit de fond (the hoose).\nPour cela, j'ai pris une machine chez Amazon sur laquelle j'ai installé ES.\nJ'ai ajouté le plugin twitter et j'ai créé une rivière twitter qui écoute ce flux de tweets en filtrant sur le mot devoxxfr.\nAinsi depuis fin Mars, le contenu devoxxfr se déverse dans Elasticsearch.\nIl suffit ensuite de réaliser une petite application d'analyse. J'ai fait ça en jQuery.\n\n
  • Vous avez donc twitté à fond pendant toute cette conférence. Ces tweets sont hébergés chez Twitter qui met à notre disposition une API streaming qui permet d'écouter en permanence le bruit de fond (the hoose).\nPour cela, j'ai pris une machine chez Amazon sur laquelle j'ai installé ES.\nJ'ai ajouté le plugin twitter et j'ai créé une rivière twitter qui écoute ce flux de tweets en filtrant sur le mot devoxxfr.\nAinsi depuis fin Mars, le contenu devoxxfr se déverse dans Elasticsearch.\nIl suffit ensuite de réaliser une petite application d'analyse. J'ai fait ça en jQuery.\n\n
  • Vous avez donc twitté à fond pendant toute cette conférence. Ces tweets sont hébergés chez Twitter qui met à notre disposition une API streaming qui permet d'écouter en permanence le bruit de fond (the hoose).\nPour cela, j'ai pris une machine chez Amazon sur laquelle j'ai installé ES.\nJ'ai ajouté le plugin twitter et j'ai créé une rivière twitter qui écoute ce flux de tweets en filtrant sur le mot devoxxfr.\nAinsi depuis fin Mars, le contenu devoxxfr se déverse dans Elasticsearch.\nIl suffit ensuite de réaliser une petite application d'analyse. J'ai fait ça en jQuery.\n\n
  • Vous avez donc twitté à fond pendant toute cette conférence. Ces tweets sont hébergés chez Twitter qui met à notre disposition une API streaming qui permet d'écouter en permanence le bruit de fond (the hoose).\nPour cela, j'ai pris une machine chez Amazon sur laquelle j'ai installé ES.\nJ'ai ajouté le plugin twitter et j'ai créé une rivière twitter qui écoute ce flux de tweets en filtrant sur le mot devoxxfr.\nAinsi depuis fin Mars, le contenu devoxxfr se déverse dans Elasticsearch.\nIl suffit ensuite de réaliser une petite application d'analyse. J'ai fait ça en jQuery.\n\n
  • Vous avez donc twitté à fond pendant toute cette conférence. Ces tweets sont hébergés chez Twitter qui met à notre disposition une API streaming qui permet d'écouter en permanence le bruit de fond (the hoose).\nPour cela, j'ai pris une machine chez Amazon sur laquelle j'ai installé ES.\nJ'ai ajouté le plugin twitter et j'ai créé une rivière twitter qui écoute ce flux de tweets en filtrant sur le mot devoxxfr.\nAinsi depuis fin Mars, le contenu devoxxfr se déverse dans Elasticsearch.\nIl suffit ensuite de réaliser une petite application d'analyse. J'ai fait ça en jQuery.\n\n
  • Vous avez donc twitté à fond pendant toute cette conférence. Ces tweets sont hébergés chez Twitter qui met à notre disposition une API streaming qui permet d'écouter en permanence le bruit de fond (the hoose).\nPour cela, j'ai pris une machine chez Amazon sur laquelle j'ai installé ES.\nJ'ai ajouté le plugin twitter et j'ai créé une rivière twitter qui écoute ce flux de tweets en filtrant sur le mot devoxxfr.\nAinsi depuis fin Mars, le contenu devoxxfr se déverse dans Elasticsearch.\nIl suffit ensuite de réaliser une petite application d'analyse. J'ai fait ça en jQuery.\n\n
  • Vous avez donc twitté à fond pendant toute cette conférence. Ces tweets sont hébergés chez Twitter qui met à notre disposition une API streaming qui permet d'écouter en permanence le bruit de fond (the hoose).\nPour cela, j'ai pris une machine chez Amazon sur laquelle j'ai installé ES.\nJ'ai ajouté le plugin twitter et j'ai créé une rivière twitter qui écoute ce flux de tweets en filtrant sur le mot devoxxfr.\nAinsi depuis fin Mars, le contenu devoxxfr se déverse dans Elasticsearch.\nIl suffit ensuite de réaliser une petite application d'analyse. J'ai fait ça en jQuery.\n\n
  • Vous avez donc twitté à fond pendant toute cette conférence. Ces tweets sont hébergés chez Twitter qui met à notre disposition une API streaming qui permet d'écouter en permanence le bruit de fond (the hoose).\nPour cela, j'ai pris une machine chez Amazon sur laquelle j'ai installé ES.\nJ'ai ajouté le plugin twitter et j'ai créé une rivière twitter qui écoute ce flux de tweets en filtrant sur le mot devoxxfr.\nAinsi depuis fin Mars, le contenu devoxxfr se déverse dans Elasticsearch.\nIl suffit ensuite de réaliser une petite application d'analyse. J'ai fait ça en jQuery.\n\n
  • Vous avez donc twitté à fond pendant toute cette conférence. Ces tweets sont hébergés chez Twitter qui met à notre disposition une API streaming qui permet d'écouter en permanence le bruit de fond (the hoose).\nPour cela, j'ai pris une machine chez Amazon sur laquelle j'ai installé ES.\nJ'ai ajouté le plugin twitter et j'ai créé une rivière twitter qui écoute ce flux de tweets en filtrant sur le mot devoxxfr.\nAinsi depuis fin Mars, le contenu devoxxfr se déverse dans Elasticsearch.\nIl suffit ensuite de réaliser une petite application d'analyse. J'ai fait ça en jQuery.\n\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • 50 contributeurs directs au projet. Plus de 2000 développeurs qui surveillent le projet sur github et il y a presque 300 forks. Spring ou Hibernate c'est moins de 200 forks.\nPROD : Klout.com : 100 millions d’utilisateurs dans le monde pour lesquels ES fait le calcul des perks\nSonian : archivage et recherche de documents dans le cloud (plus de 20 clusters et plus de 5 milliards de documents indexés)\nYfrog : indexation des photos et vidéos pour twitter (3 millions de tweets par jour)\nhttp://elasticsearch-users.115913.n3.nabble.com/some-ES-stats-at-yfrog-com-td3759891.html\nDouane : Gestion des contrôles réalisés par les douaniers (500 000 documents indexés dont 50% de documents oOo, pdf, …). Moteur sur les déclarations de douane est en cours : un volume de plus 100 millions de marchandises à traiter.\nRejoignez le mouvement ! Essayez et vous verrez à quel point c’est simple et efficace.\n\n
  • \n
  • \n
  • \n
  • Elasticsearch - Devoxx France 2012

    1. 1. Elasticsearch : moteur de recherchetaillé pour le cloud par David Pilato @dadoonet et @elasticsearchfr 1
    2. 2. { “speaker” : “David Pilato” }$ curl http://localhost:9200/devoxx/speaker/dpilato{ "nom" : "David Pilato", "jobs" : [ { "boite" : "SRA Europe (SSII)", "mission" : "bon à tout faire", "duree" : 3 }, { "boite" : "SFR", "mission" : "touche à tout", "duree" : 3 }, { "boite" : "e-Brands / Vivendi", "mission" : "chef de projets", "duree" : 4 }, { "boite" : "DGDDI (douane)", "mission" : "mouton à 5 pattes", "duree" : 7 } ], "passions" : [ "famille", "job", "deejay" ], "blog" : "http://dev.david.pilato.fr/", "twitter" : [ "@dadoonet", "@elasticsearchfr" ], "email" : "david@pilato.fr"} 2
    3. 3. Abstract• Un moteur ? Pourquoi faire ?• Elasticsearch : une solution simple, complète, performante• Et si on indexait Twitter ? Faites du bruit sur @DevoxxFR avec le hashtag #elasticsearch ! 3
    4. 4. Un moteur ? Pour quoi faire ?LE BESOIN 4
    5. 5. Cas décole « SQL old school » Un document dans une base de données : • Un attribut date : 19/04/2012 • Un attribut codifié pays : FR • Correspondant à la table d’association code/libellé • Code : FR • Libellé : France • Un attribut commentaire : "J’observe une erreur de saisie dans la désignation commerciale du produit. Songer à téléphoner à David."Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 5
    6. 6. Cas décole « SQL old school » Un document dans une base de données : doc pays • Un attribut date : 19/04/2012 date code • Un attribut codifié pays : FR pays libelle • Correspondant à la table d’association code/libellé commentaire • Code : FR • Libellé : France • Un attribut commentaire : "J’observe une erreur de saisie dans la désignation commerciale du produit. Songer à téléphoner à David."Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 5
    7. 7. Cas décole « SQL old school » • Cherche moi un document de décembre 2011 portant sur la france et contenant saisie et david • En SQL :Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 6
    8. 8. Cas décole « SQL old school » • Cherche moi un document de décembre 2011 portant sur la france et contenant saisie et david • En SQL : SELECT doc.*, pays.* FROM doc, pays WHERE doc.pays_code = pays.code AND doc.date_doc > to_date(2011-12, yyyy-mm) AND doc.date_doc < to_date(2012-01, yyyy-mm) AND lower(pays.libelle) = france AND lower(doc.commentaire) LIKE ‘%saisie% AND lower(doc.commentaire) LIKE ‘%david%;Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 6
    9. 9. Performances du like ‘%’Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 7
    10. 10. Performances du like ‘%’ Voir aussi : http://www.cestpasdur.com/2012/04/01/elasticsearch-vs-mysql-rechercheMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 7
    11. 11. Cest quoi un moteur ?Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 8
    12. 12. Cest quoi un moteur ? • Un moteur de recherche est composé de : • un moteur d’indexation de documents • un moteur de recherche sur les indexMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 8
    13. 13. Cest quoi un moteur ? • Un moteur de recherche est composé de : • un moteur d’indexation de documents • un moteur de recherche sur les index • De fait, un moteur de recherche est énormément plus rapide qu’une base de données pour faire des recherches :Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 8
    14. 14. Cest quoi un moteur ? • Un moteur de recherche est composé de : • un moteur d’indexation de documents • un moteur de recherche sur les index • De fait, un moteur de recherche est énormément plus rapide qu’une base de données pour faire des recherches : c’est son métier !Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 8
    15. 15. ELASTICSEARCH 9
    16. 16. Your Data, your Search !ELASTICSEARCH 9
    17. 17. ElasticsearchMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 10
    18. 18. Elasticsearch • Moteur de recherche pour la génération NoSQLMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 10
    19. 19. Elasticsearch • Moteur de recherche pour la génération NoSQL • Basé sur le standard Apache LuceneMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 10
    20. 20. Elasticsearch • Moteur de recherche pour la génération NoSQL • Basé sur le standard Apache Lucene • Masque la complexité Java/Lucene à l’aide de services standards HTTP / RESTful / JSONMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 10
    21. 21. Elasticsearch • Moteur de recherche pour la génération NoSQL • Basé sur le standard Apache Lucene • Masque la complexité Java/Lucene à l’aide de services standards HTTP / RESTful / JSON • Utilisable à partir de n’importe quelle technologieMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 10
    22. 22. Elasticsearch • Moteur de recherche pour la génération NoSQL • Basé sur le standard Apache Lucene • Masque la complexité Java/Lucene à l’aide de services standards HTTP / RESTful / JSON • Utilisable à partir de n’importe quelle technologie • Ajoute la couche cloud manquante à LuceneMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 10
    23. 23. Elasticsearch • Moteur de recherche pour la génération NoSQL • Basé sur le standard Apache Lucene • Masque la complexité Java/Lucene à l’aide de services standards HTTP / RESTful / JSON • Utilisable à partir de n’importe quelle technologie • Ajoute la couche cloud manquante à Lucene • C’est un moteur, pas une interface graphique !Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 10
    24. 24. Points clésMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 11
    25. 25. Points clés • Simple ! En quelques minutes (Zero Conf), on dispose d’un moteur complet prêt à recevoir nos documents à indexer et à faire des recherches.Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 11
    26. 26. Points clés • Simple ! En quelques minutes (Zero Conf), on dispose d’un moteur complet prêt à recevoir nos documents à indexer et à faire des recherches. • Efficace ! Il suffit de démarrer des nœuds Elasticsearch pour bénéficier immédiatement de la réplication, de l’équilibrage de charge.Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 11
    27. 27. Points clés • Simple ! En quelques minutes (Zero Conf), on dispose d’un moteur complet prêt à recevoir nos documents à indexer et à faire des recherches. • Efficace ! Il suffit de démarrer des nœuds Elasticsearch pour bénéficier immédiatement de la réplication, de l’équilibrage de charge. • Puissant ! Basé sur Lucene, il en parallélise les traitements pour donner des temps de réponse acceptables (en général inférieurs à 100ms)Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 11
    28. 28. Points clés • Simple ! En quelques minutes (Zero Conf), on dispose d’un moteur complet prêt à recevoir nos documents à indexer et à faire des recherches. • Efficace ! Il suffit de démarrer des nœuds Elasticsearch pour bénéficier immédiatement de la réplication, de l’équilibrage de charge. • Puissant ! Basé sur Lucene, il en parallélise les traitements pour donner des temps de réponse acceptables (en général inférieurs à 100ms) • Complet ! Beaucoup de fonctionnalités : analyse et facettes, percolation, rivières, plugins, …Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 11
    29. 29. Ranger ses donnéesMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 12
    30. 30. Ranger ses données • Document : Un objet représentant les données (au sens NoSQL). Penser "recherche", cest oublier le SGBDR et penser "Documents"Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 12
    31. 31. Ranger ses données • Document : Un objet représentant les données (au sens NoSQL). Penser "recherche", cest oublier le SGBDR et penser "Documents" { "text": "Bienvenue à la conférence #elasticsearch pour #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", "truncated": false, Un tweet "retweet_count": 0, "hashtag": [ { "text": "elasticsearch", "start": 27, "end": 40 }, { "text": "devoxxfr", "start": 47, "end": 55 } ], "user": { "id": 51172224, "name": "David Pilato", "screen_name": "dadoonet", "location": "France", "description": "Soft Architect, Project Manager, Senior Developper.rnAt this time, enjoying NoSQL world : CouchDB, ElasticSearch.rnDeeJay 4 times a year, just for fun !" } }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 12
    32. 32. Ranger ses données • Document : Un objet représentant les données (au sens NoSQL). Penser "recherche", cest oublier le SGBDR et penser "Documents" { "text": "Bienvenue à la conférence #elasticsearch pour #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", "truncated": false, Un tweet "retweet_count": 0, "hashtag": [ { "text": "elasticsearch", "start": 27, "end": 40 }, { "text": "devoxxfr", "start": 47, "end": 55 } ], "user": { "id": 51172224, "name": "David Pilato", "screen_name": "dadoonet", "location": "France", "description": "Soft Architect, Project Manager, Senior Developper.rnAt this time, enjoying NoSQL world : CouchDB, ElasticSearch.rnDeeJay 4 times a year, just for fun !" } } • Type : Regroupe des documents de même typeMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 12
    33. 33. Ranger ses données • Document : Un objet représentant les données (au sens NoSQL). Penser "recherche", cest oublier le SGBDR et penser "Documents" { "text": "Bienvenue à la conférence #elasticsearch pour #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", "truncated": false, Un tweet "retweet_count": 0, "hashtag": [ { "text": "elasticsearch", "start": 27, "end": 40 }, { "text": "devoxxfr", "start": 47, "end": 55 } ], "user": { "id": 51172224, "name": "David Pilato", "screen_name": "dadoonet", "location": "France", "description": "Soft Architect, Project Manager, Senior Developper.rnAt this time, enjoying NoSQL world : CouchDB, ElasticSearch.rnDeeJay 4 times a year, just for fun !" } } • Type : Regroupe des documents de même type • Index : Espace logique de stockage des documents dont les types sont fonctionnellement communsMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 12
    34. 34. Interagir avec Elasticsearch API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETEMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 13
    35. 35. Interagir avec Elasticsearch API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE Documents • curl -XPUT http://localhost:9200/twitter/tweet/1Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 13
    36. 36. Interagir avec Elasticsearch API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 • curl -XGET http://localhost:9200/twitter/tweet/1Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 13
    37. 37. Interagir avec Elasticsearch API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 • curl -XGET http://localhost:9200/twitter/tweet/1 • curl -XDELETE http://localhost:9200/twitter/tweet/1Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 13
    38. 38. Interagir avec Elasticsearch API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 • curl -XGET http://localhost:9200/twitter/tweet/1 • curl -XDELETE http://localhost:9200/twitter/tweet/1 Recherche • curl -XGET http://localhost:9200/twitter/tweet/_searchMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 13
    39. 39. Interagir avec Elasticsearch API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 • curl -XGET http://localhost:9200/twitter/tweet/1 • curl -XDELETE http://localhost:9200/twitter/tweet/1 Recherche • curl -XGET http://localhost:9200/twitter/tweet/_search • curl -XGET http://localhost:9200/twitter/_searchMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 13
    40. 40. Interagir avec Elasticsearch API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 • curl -XGET http://localhost:9200/twitter/tweet/1 • curl -XDELETE http://localhost:9200/twitter/tweet/1 Recherche • curl -XGET http://localhost:9200/twitter/tweet/_search • curl -XGET http://localhost:9200/twitter/_search • curl -XGET http://localhost:9200/_searchMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 13
    41. 41. Interagir avec Elasticsearch API REST : http://host:port/[index]/[type]/[_action/id] Méthodes HTTP : GET, POST, PUT, DELETE Documents • curl -XPUT http://localhost:9200/twitter/tweet/1 • curl -XGET http://localhost:9200/twitter/tweet/1 • curl -XDELETE http://localhost:9200/twitter/tweet/1 Recherche • curl -XGET http://localhost:9200/twitter/tweet/_search • curl -XGET http://localhost:9200/twitter/_search • curl -XGET http://localhost:9200/_search Meta données Elasticsearch • curl -XGET http://localhost:9200/twitter/_statusMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 13
    42. 42. Indexons un document $ curl -XPUT localhost:9200/twitter/tweet/1 -d { "text": "Bienvenue à la conférence #elasticsearch pour #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", "truncated": false, "retweet_count": 0, "hashtag": [ { "text": "elasticsearch", "start": 27, "end": 40 }, { "text": "devoxxfr", "start": 47, "end": 55 } ], "user": { "id": 51172224, "name": "David Pilato", "screen_name": "dadoonet", "location": "France", "description": "Soft Architect, Project Manager, Senior Developper.rnAt this time, enjoying NoSQL world : CouchDB, ElasticSearch.rnDeeJay 4 times a year, just for fun !" } }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 14
    43. 43. Indexons un document $ curl -XPUT localhost:9200/twitter/tweet/1 -d { "text": "Bienvenue à la conférence #elasticsearch pour #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", "truncated": false, "retweet_count": 0, "hashtag": [ { "text": "elasticsearch", "start": 27, "end": 40 }, { "text": "devoxxfr", "start": 47, "end": 55 } ], "user": { "id": 51172224, "name": "David Pilato", "screen_name": "dadoonet", "location": "France", "description": "Soft Architect, Project Manager, Senior Developper.rnAt this time, enjoying NoSQL world : CouchDB, ElasticSearch.rnDeeJay 4 times a year, just for fun !" } } { "ok":true, "_index":"twitter", "_type":"tweet", "_id":"1" }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 14
    44. 44. Cherchons un document $ curl localhost:9200/twitter/tweet/_search?q=elasticsearchMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 15
    45. 45. Cherchons un document $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch { "took" : 24, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 1, "max_score" : 0.227, "hits" : [ { "_index" : "twitter", "_type" : "tweet", "_id" : "1", "_score" : 0.227, "_source" : { "text": "Bienvenue à la conférence #elasticsearch pour #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] } } ] } }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 15
    46. 46. Cherchons un document $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch { "took" : 24, "timed_out" : false, Nb de documents "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 1, "max_score" : 0.227, "hits" : [ { "_index" : "twitter", "_type" : "tweet", "_id" : "1", "_score" : 0.227, "_source" : { "text": "Bienvenue à la conférence #elasticsearch pour #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] } } ] } }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 15
    47. 47. Cherchons un document $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch { "took" : 24, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 1, "max_score" : 0.227, "hits" : [ { Coordonnées "_index" : "twitter", "_type" : "tweet", "_id" : "1", "_score" : 0.227, "_source" : { "text": "Bienvenue à la conférence #elasticsearch pour #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] } } ] } }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 15
    48. 48. Cherchons un document $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch { "took" : 24, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 1, "max_score" : 0.227, "hits" : [ { "_index" : "twitter", "_type" : "tweet", "_id" : "1", "_score" : 0.227, "_source" : { "text": "Bienvenue à la conférence #elasticsearch pour #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] Pertinence } } ] } }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 15
    49. 49. Cherchons un document $ curl localhost:9200/twitter/tweet/_search?q=elasticsearch { "took" : 24, "timed_out" : false, Document "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { source "total" : 1, "max_score" : 0.227, "hits" : [ { "_index" : "twitter", "_type" : "tweet", "_id" : "1", "_score" : 0.227, "_source" : { "text": "Bienvenue à la conférence #elasticsearch pour #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", […] } } ] } }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 15
    50. 50. Les résultats de rechercheMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 16
    51. 51. Les résultats de recherche • Elasticsearch ne renvoie que les 10 premiers résultats (même sur plusieurs millions) • Elasticsearch permet ensuite de se "balader" dans les résultats $ curl "localhost:9200/twitter/tweet/_search?q=elasticsearch&from=10&size=10"Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 16
    52. 52. Les résultats de recherche • Elasticsearch ne renvoie que les 10 premiers résultats (même sur plusieurs millions) • Elasticsearch permet ensuite de se "balader" dans les résultats $ curl "localhost:9200/twitter/tweet/_search?q=elasticsearch&from=10&size=10" • La pertinence est calculée suivant le nombre doccurrences plus ou moins exactes de chaque terme dans un document $ curl "localhost:9200/twitter/tweet/_search?q=elasticsearch&explain=true"Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 16
    53. 53. Quelques types de recherche Langage QueryDSL pour les recherches avancées Type Description Recherche tout le contenu (pratique avec des filtres) Recherche avec analyse, jokers (syntaxe Lucene possible* +, -, FROM, TO, ^) Recherche dun terme sans analyse préalable Recherche dun texte avec analyse (par défaut OR sur chaque token) Recherche avec joker (*, ?) Recherche multi-critères (MUST, MUST NOT, SHOULD) Recherche intervalle (>, >=, <, <=) Utile pour faire de lautocomplétion Filtrage (couplage de filtres et de queries) Permet des recherches par vraisemblance de termes Permet de trouver des documents avec un minimum de termesMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 17
    54. 54. Quelques types de recherche Langage QueryDSL pour les recherches avancées Type Description Match All Recherche tout le contenu (pratique avec des filtres) QueryString Recherche avec analyse, jokers (syntaxe Lucene possible* +, -, FROM, TO, ^) Term Recherche dun terme sans analyse préalable Text Recherche dun texte avec analyse (par défaut OR sur chaque token) Wildcard Recherche avec joker (*, ?) Bool Recherche multi-critères (MUST, MUST NOT, SHOULD) Range Recherche intervalle (>, >=, <, <=) Prefix Utile pour faire de lautocomplétion Filtered Filtrage (couplage de filtres et de queries) Fuzzy like this Permet des recherches par vraisemblance de termes More like this Permet de trouver des documents avec un minimum de termes * http://lucene.apache.org/core/old_versioned_docs/versions/3_5_0/queryparsersyntax.htmlMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 17
    55. 55. LA COLLECTE AUTOMATIQUE DE DONNÉES 18
    56. 56. Ou "La vie est un long fleuve tranquille !"LA COLLECTE AUTOMATIQUE DE DONNÉES 18
    57. 57. La collecteMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 19
    58. 58. La collecte Stockage DonnéesMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 19
    59. 59. La collecte Doc Stockage DonnéesMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 19
    60. 60. La collecte Stockage Données DocMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 20
    61. 61. La collecte Doc Stockage Données DocMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 20
    62. 62. La collecte Stockage Données Doc DocMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 21
    63. 63. La collecte Stockage Données Doc DocMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 21
    64. 64. La collecte Stockage Données Doc DocMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 21
    65. 65. La collecte Stockage Données Doc DocMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 22
    66. 66. La collecte Doc Stockage Données Doc DocMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 22
    67. 67. La collecte Stockage Données Doc DocMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 23
    68. 68. La collecte Stockage Données DocMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 24
    69. 69. RiversMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 25
    70. 70. Rivers • CouchDB RiverMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 25
    71. 71. Rivers • CouchDB River • MongoDB RiverMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 25
    72. 72. Rivers • CouchDB River • MongoDB River • Wikipedia RiverMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 25
    73. 73. Rivers • CouchDB River • MongoDB River • Wikipedia River • Twitter RiverMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 25
    74. 74. Rivers • CouchDB River • MongoDB River • Wikipedia River • Twitter River • RabbitMQ RiverMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 25
    75. 75. Rivers • CouchDB River • MongoDB River • Wikipedia River • Twitter River • RabbitMQ River • RSS RiverMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 25
    76. 76. Rivers • CouchDB River • MongoDB River • Wikipedia River • Twitter River • RabbitMQ River • RSS River • Dick RiversMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 25
    77. 77. La puissance des facettes ! Faites parler vos données en les regardant sous différentes facettes !ANALYSE DES RÉSULTATS (EN TEMPS QUASI RÉEL) 26
    78. 78. Les facettes ID Username Date Hashtags 1 dadoonet 2012-04-18 1 2 devoxxfr 2012-04-18 5 Des tweets 3 elasticsearchfr 2012-04-18 2 4 dadoonet 2012-04-18 2 5 devoxxfr 2012-04-18 6 6 elasticsearchfr 2012-04-19 3 7 dadoonet 2012-04-19 3 8 devoxxfr 2012-04-19 7 9 elasticsearchfr 2012-04-20 4Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 27
    79. 79. Facette "Term" Username Date Hashtags dadoonet 2012-04-18 1 devoxxfr 2012-04-18 5 elasticsearchfr 2012-04-18 2 dadoonet 2012-04-18 2 devoxxfr 2012-04-18 6 elasticsearchfr 2012-04-19 3 dadoonet 2012-04-19 3 devoxxfr 2012-04-19 7 elasticsearchfr 2012-04-20 4Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 28
    80. 80. Facette "Term" Username Date Hashtags dadoonet 2012-04-18 1 devoxxfr 2012-04-18 5 elasticsearchfr 2012-04-18 Username 2 Count dadoonet 2012-04-18 dadoonet 2 3 devoxxfr 2012-04-18 devoxxfr6 3 elasticsearchfr 2012-04-19 elasticsearchfr 3 3 dadoonet 2012-04-19 3 devoxxfr 2012-04-19 7 elasticsearchfr 2012-04-20 4Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 28
    81. 81. Facette "Term" "facets" : { "users" : { "terms" : {"field" : "username"} } } ID Username Date Hashtags 1 dadoonet 2012-04-18 1 2 devoxxfr 2012-04-18 5 3 elasticsearchfr 2012-04-18 2 4 dadoonet 2012-04-18 2 5 devoxxfr 2012-04-18 6 6 elasticsearchfr 2012-04-19 3 7 dadoonet 2012-04-19 3 8 devoxxfr 2012-04-19 7 9 elasticsearchfr 2012-04-20 4Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 29
    82. 82. Facette "Term" "facets" : { "users" : { "terms" : {"field" : "username"} } } ID Username Date "facets" : { Hashtags 1 dadoonet 2012-04-18 : { "users" 1 2 devoxxfr 2012-04-18 : "terms", "_type" 5 "missing" : 0, 3 elasticsearchfr 2012-04-18 2 "total": 9, 4 dadoonet 2012-04-18 "other": 0, 2 5 devoxxfr 2012-04-18 : [ "terms" 6 6 elasticsearchfr { "term" : "dadoonet", "count" : 3 }, 2012-04-19 3 { "term" : "devoxxfr", "count" : 3 }, 7 dadoonet 2012-04-19 3 { "term" : "elasticsearchfr", "count" : 3 } 8 devoxxfr 2012-04-19 ] 7 9 elasticsearchfr } 2012-04-20 4Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 29
    83. 83. Facette "Date Histogram"ame Date Hashtagsonet 2012-04-18 1xxfr 2012-04-18 5archfr 2012-04-18 2onet 2012-04-18 2xxfr 2012-04-18 6archfr 2012-04-19 3onet 2012-04-19 3xxfr 2012-04-19 7archfr 2012-04-20 4 Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 30
    84. 84. Facette "Date Histogram"ame Date Hashtagsonet 2012-04-18 1 Par mois Date Countxxfr 2012-04-18 5 2012-04 9archfr 2012-04-18 2onet 2012-04-18 2 Par jourxxfr 2012-04-18 6 Date Countarchfr 2012-04-19 3 2012-04-18 5onet 2012-04-19 3 2012-04-19 3xxfr 2012-04-19 7 2012-04-20 1archfr 2012-04-20 4 Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 30
    85. 85. Facette "Date Histogram" "facets" : { "perday" : { "date_histogram" : { "field" : "date",ame Date "interval" : "day" Hashtags }onet 2012-04-18 }1xxfr 2012-04-18 } 5archfr 2012-04-18 2onet 2012-04-18 2xxfr 2012-04-18 6archfr 2012-04-19 3onet 2012-04-19 3xxfr 2012-04-19 7archfr 2012-04-20 4 Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 31
    86. 86. Facette "Date Histogram" "facets" : { "perday" : { "date_histogram" : { "field" : "date",ame Date "interval" : "day" Hashtags }onet 2012-04-18 }1xxfr 2012-04-18 } 5archfr 2012-04-18 2 "facets" : {onet 2012-04-18 2 "perday" : {xxfr 2012-04-18 "_type" : "date_histogram", 6 "entries": [archfr 2012-04-19 3 { "time": 1334700000000, "count": 5 },onet 2012-04-19 3 { "time": 1334786400000, "count": 3 },xxfr 2012-04-19 7 { "time": 1334872800000, "count": 1 } ]archfr 2012-04-20 } 4 } Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 31
    87. 87. Facette "Ranges" Hashtags8 18 58 28 28 69 39 39 70 4 Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 32
    88. 88. Facette "Ranges" Hashtags8 18 5 Ranges Count Min Max Moy Total8 2 x<3 3 1 2 1.667 58 2 3 <= x < 5 3 3 4 3.333 108 6 x >= 5 3 5 7 6 189 39 39 70 4 Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 32
    89. 89. Facette "Ranges" "facets" : { "hashtags" : { "range" : { "field" : "hashtags", "ranges" : [ { "to" : 3 }, { "from" : 3, "to" : 5 }, { "from" : 5 } Hashtags ] } } }8 18 58 28 28 69 39 39 70 4 Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 33
    90. 90. Facette "Ranges" "facets" : { "hashtags" : { "range" : { "field" : "hashtags", "ranges" : [ { "to" : 3 }, { "from" : 3, "to" : 5 }, { "from" : 5 } Hashtags ] } } }8 1 "facets" : {8 5 "hashtags" : { "_type" : "range",8 2 "ranges" : [8 2 { "to": 3,8 6 "count": 3, "min": 1, "max": 2, "total": 5, "mean": 1.667 },9 3 { "from":3, "to" : 5,9 3 "count": 3, "min": 3, "max": 4, "total": 10, "mean": 3.333 },9 7 { "from":5,0 4 "count": 3, "min": 5, "max": 7, "total": 18, "mean": 6 } ] } } Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 33
    91. 91. Usage "site marchand"Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 34
    92. 92. Usage "site marchand"Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 34
    93. 93. Usage "site marchand"Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 34
    94. 94. Usage "site marchand" Ranges Term Term RangesMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 34
    95. 95. La navigation par facettesMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 35
    96. 96. La navigation par facettes Critère fixeMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 35
    97. 97. La navigation par facettes Critère fixe RésultatsMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 35
    98. 98. La navigation par facettes Critère fixe Term RésultatsMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 35
    99. 99. La navigation par facettes Critère fixe Term Date histogram RésultatsMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 35
    100. 100. La navigation par facettes Critère fixe Term Ranges Date histogram RésultatsMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 35
    101. 101. La navigation par facettesMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 36
    102. 102. La navigation par facettes CritèresMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 36
    103. 103. Analyse temps-réel des données • Faire un matchAll sur lensemble des données • Actualiser toutes les x secondes • Indexer en même temps les nouvelles données Date histogram TermMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 37
    104. 104. Avons-nous fait du bruit ?DÉMONSTRATION 38
    105. 105. Démonstration : architectureMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 39
    106. 106. Démonstration : architectureMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 39
    107. 107. Démonstration : architecture Twitter Streaming APIMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 39
    108. 108. Démonstration : architecture Twitter Streaming APIMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 39
    109. 109. Démonstration : architecture Twitter Streaming APIMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 39
    110. 110. Démonstration : architecture Twitter Twitter Streaming River API $ curl -XPUT localhost:9200/_river/twitter/_meta -d { "type" : "twitter", "twitter" : { "user" : "twitter_user", "password" : "twitter_passowrd", "filter" : { "tracks" : ["devoxxfr"] } } }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 39
    111. 111. Démonstration : architecture Chrome Twitter Twitter Streaming River API $ curl -XPUT localhost:9200/_river/twitter/_meta -d { "type" : "twitter", "twitter" : { "user" : "twitter_user", "password" : "twitter_passowrd", "filter" : { "tracks" : ["devoxxfr"] } } }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 39
    112. 112. Un peu plus de technique : partitions / réplications / scalabilitéARCHITECTURE 40
    113. 113. LexiqueMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 41
    114. 114. Lexique • Nœud (node) : Une instance dElasticsearch (~ machine ?)Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 41
    115. 115. Lexique • Nœud (node) : Une instance dElasticsearch (~ machine ?) • Cluster : Un ensemble de nœudsMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 41
    116. 116. Lexique • Nœud (node) : Une instance dElasticsearch (~ machine ?) • Cluster : Un ensemble de nœuds • Partition (shard) : permet de découper un index en plusieurs parties pour y distribuer les documentsMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 41
    117. 117. Lexique • Nœud (node) : Une instance dElasticsearch (~ machine ?) • Cluster : Un ensemble de nœuds • Partition (shard) : permet de découper un index en plusieurs parties pour y distribuer les documents • Réplication (replica) : recopie d’une partition en une ou plusieurs copies dans lensemble du clusterMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 41
    118. 118. Lexique • Nœud (node) : Une instance dElasticsearch (~ machine ?) • Cluster : Un ensemble de nœuds • Partition (shard) : permet de découper un index en plusieurs parties pour y distribuer les documents • Réplication (replica) : recopie d’une partition en une ou plusieurs copies dans lensemble du cluster • Partition primaire (primary shard) : partition élue "principale" dans lensemble du cluster. Cest là que se fait lindexation par Lucene. Il ny en a quune seule par shard dans lensemble du cluster.Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 41
    119. 119. Lexique • Nœud (node) : Une instance dElasticsearch (~ machine ?) • Cluster : Un ensemble de nœuds • Partition (shard) : permet de découper un index en plusieurs parties pour y distribuer les documents • Réplication (replica) : recopie d’une partition en une ou plusieurs copies dans lensemble du cluster • Partition primaire (primary shard) : partition élue "principale" dans lensemble du cluster. Cest là que se fait lindexation par Lucene. Il ny en a quune seule par shard dans lensemble du cluster. • Partition secondaire (secondary shard) : partitions secondaires stockant les replicas des partitions primaires.Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 41
    120. 120. Créons un index Cluster Nœud 1 Client CURLMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 42
    121. 121. Créons un index $ curl -XPUT localhost:9200/twitter -d { Cluster "index" : { "number_of_shards" : 2, Nœud 1 "number_of_replicas" : 1 Shard 0 } } Shard 1 réplication non respectée Client CURLMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 42
    122. 122. Créons un index $ curl -XPUT localhost:9200/twitter -d { Cluster "index" : { "number_of_shards" : 2, Nœud 1 Nœud 2 "number_of_replicas" : 1 Shard 0 Shard 0 } } Shard 1 Shard 1 réplication respectée Client CURLMoteur Elasticsearch Rivers Facets Demo Architecture Communauté 42
    123. 123. Réallocation dynamique Cluster Nœud 1 Nœud 2 Shard 0 Shard 0 Shard 1 Shard 1Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 43
    124. 124. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Shard 0 Shard 0 Shard 1 Shard 1Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 43
    125. 125. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Shard 0 Shard 0 Shard 0 Shard 1 Shard 1Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 44
    126. 126. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Shard 0 Shard 0 Shard 1 Shard 1Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 44
    127. 127. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Shard 0 Shard 0 Shard 1 Shard 1Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 44
    128. 128. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Shard 0 Shard 0 Shard 1 Shard 1 Shard 1Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 45
    129. 129. Réallocation dynamique Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Shard 0 Shard 0 Shard 1 Shard 1 Le tuning, cest trouver le bon équilibre entre le nombre de nodes, shards et replicas !Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 45
    130. 130. Indexons un document Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Shard 0 Shard 0 Shard 1 Shard 1 Doc 1 Client $ curl -XPUT localhost:9200/twitter/tweet/1 -d CURL { "text": "Bienvenue à la conférence #elasticsearch pour #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", ... }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 46
    131. 131. Indexons un document Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Shard 0 1 Shard 0 Shard 1 Shard 1 Client $ curl -XPUT localhost:9200/twitter/tweet/1 -d CURL { "text": "Bienvenue à la conférence #elasticsearch pour #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", ... }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 47
    132. 132. Indexons un document Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Shard 0 1 Shard 0 Shard 1 Shard 1 Client $ curl -XPUT localhost:9200/twitter/tweet/1 -d CURL { "text": "Bienvenue à la conférence #elasticsearch pour #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", ... }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 47
    133. 133. Indexons un document Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Doc Shard 0 1 Shard 0 1 Shard 1 Shard 1 Client $ curl -XPUT localhost:9200/twitter/tweet/1 -d CURL { "text": "Bienvenue à la conférence #elasticsearch pour #devoxxfr", "created_at": "2012-04-06T20:45:36.000Z", "source": "Twitter for iPad", ... }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 48
    134. 134. Indexons un 2ème document Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Doc Shard 0 1 Shard 0 1 Shard 1 Shard 1 Doc 2 Client $ curl -XPUT localhost:9200/twitter/tweet/2 -d CURL { "text": "Je fais du bruit pour #elasticsearch à #devoxxfr", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 49
    135. 135. Indexons un 2ème document ClusterNœud 1 Nœud 2 Nœud 3 Nœud 4 Doc DocShard 0 1 Shard 0 1 Shard 1 Shard 1 Doc 2 Client $ curl -XPUT localhost:9200/twitter/tweet/2 -d CURL { "text": "Je fais du bruit pour #elasticsearch à #devoxxfr", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... } 50
    136. 136. Indexons un 2ème document Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Doc Shard 0 1 Shard 0 1 Shard 1 Doc Shard 1 2 Client $ curl -XPUT localhost:9200/twitter/tweet/2 -d CURL { "text": "Je fais du bruit pour #elasticsearch à #devoxxfr", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 51
    137. 137. Indexons un 2ème document Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Doc Shard 0 1 Shard 0 1 Shard 1 Doc Shard 1 2 Client $ curl -XPUT localhost:9200/twitter/tweet/2 -d CURL { "text": "Je fais du bruit pour #elasticsearch à #devoxxfr", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 51
    138. 138. Indexons un 2ème document Cluster Nœud 1 Nœud 2 Nœud 3 Nœud 4 Doc Doc Shard 0 1 Shard 0 1 Doc Doc Shard 1 Shard 1 2 2 Client $ curl -XPUT localhost:9200/twitter/tweet/2 -d CURL { "text": "Je fais du bruit pour #elasticsearch à #devoxxfr", "created_at": "2012-04-06T21:12:52.000Z", "source": "Twitter for iPad", ... }Moteur Elasticsearch Rivers Facets Demo Architecture Communauté 52

    ×