Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

Présentation de ElasticSearch / Digital apéro du 12/11/2014

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité

Consultez-les par la suite

1 sur 32 Publicité

Présentation de ElasticSearch / Digital apéro du 12/11/2014

Télécharger pour lire hors ligne

ElasticSearch est un moteur de recherche open source reposant sur une interface JSON, pouvant fonctionner en mode distribué et interrogeable facilement via son API REST. Cédric Nirousset, Développeur web indépendant, vous fera découvrir les intérêts de l’utiliser dans vos applications à travers quelques exemples pratiques.

A propos de l’intervenant : Cédric Nirousset, diplomé dut DUT SRC Montébliard en 2006 et de l’UTBM en Informatique en 2010, il est maintenant développeur web indépendant à Besançon, travaillant pour des entreprises de toutes tailles et tous horizons. Suivez Cédric sur Twitter @Nyr0

ElasticSearch est un moteur de recherche open source reposant sur une interface JSON, pouvant fonctionner en mode distribué et interrogeable facilement via son API REST. Cédric Nirousset, Développeur web indépendant, vous fera découvrir les intérêts de l’utiliser dans vos applications à travers quelques exemples pratiques.

A propos de l’intervenant : Cédric Nirousset, diplomé dut DUT SRC Montébliard en 2006 et de l’UTBM en Informatique en 2010, il est maintenant développeur web indépendant à Besançon, travaillant pour des entreprises de toutes tailles et tous horizons. Suivez Cédric sur Twitter @Nyr0

Publicité
Publicité

Plus De Contenu Connexe

Diaporamas pour vous (20)

Les utilisateurs ont également aimé (20)

Publicité

Similaire à Présentation de ElasticSearch / Digital apéro du 12/11/2014 (20)

Plus par Silicon Comté (20)

Publicité

Plus récents (20)

Présentation de ElasticSearch / Digital apéro du 12/11/2014

  1. 1. ELASTIC SEARCH DIGITAL APÉRO SILICONCOMTÉ par Cédric Nirousset - @Nyr0
  2. 2. PRÉSENTATION Développeur web indépendant depuis 2004 PHP Symfony MySQL Intégration / Responsive Elastic Search etc... nyroDev
  3. 3. Open source Un indexeur de documents (basé sur Apache Lucene) Une API HTTP/RESTFul/JSON Distribué Simple et puissant à la fois En quasi temps réel Mais ce n'est pas une base de données
  4. 4. ROUTE DES COMMUNES Editorial et contenus sur : 4 départements de Franche-Comté 67 communautés de communes de Franche-Comté 103 cantons de Franche-Comté 1 785 communes de Franche-Comté 5 000 entreprises de Franche-Comté 2 524 activités soit un total d'environ 9 500 lignes, stockées en MySQL
  5. 5. RECHERCHE MYSQL : "NYRODEV" UNIQUEMENT SUR LE TITRE SELECT * FROM entreprise WHERE name LIKE "%nyrodev%" 12ms
  6. 6. RECHERCHE MYSQL : "NYRODEV" SUR LES CHAMPS TEXTES SELECT * FROM entreprise WHERE name LIKE "%nyrodev%" OR responsable LIKE "%nyrodev%" OR description LIKE "%nyrodev%" OR activite_principale LIKE "%nyrodev%" OR activite_secondaire LIKE "%nyrodev%" 13ms
  7. 7. RECHERCHE MYSQL : "NYRODEV NIROUSSET" UNIQUEMENT SUR LE TITRE SELECT * FROM entreprise WHERE name LIKE "%nyrodev%" AND name LIKE "%nirousset%" 13ms 0 résultat
  8. 8. RECHERCHE MYSQL : "NYRODEV NIROUSSET" SUR LES CHAMPS TEXTES SELECT * FROM entreprise WHERE (name LIKE "%nyrodev%" OR responsable LIKE "%nyrodev%" OR description LIKE "%nyrodev%" OR activite_principale LIKE "%nyrodev%" OR activite_secondaire LIKE "%nyrodev%") AND (name LIKE "%nirousset%" OR responsable LIKE "%nirousset%" OR description LIKE "%nirousset%" OR activite_principale LIKE "%nirousset%" OR activite_secondaire LIKE "%nirousset%") 14ms
  9. 9. ET ON POURRAIT AJOUTER : D'autres champs textes existants Recherche sur la commune (jointure) Recherche sur les publicités (jointure) ET ON NE CHERCHE QUE SUR LES ENTREPRISES !
  10. 10. QUELQUES TERMES Document : Un object JSON représentant les données Penser NoSQL (donc jointures incluses et "applaties") Type : Regroupe des documents du même type Index Espace logique de stockage des documents dont les types sont fonctionnellement communs
  11. 11. API DE BASE D'ELASTIC SEARCH API REST : http://host:port/[index]/[type]/[_action/_id] Documents : curl -XPUT http://localhost:9200/rdc/entreprise/1 curl -XGET http://localhost:9200/rdc/entreprise/1 curl -XDELETE http://localhost:9200/rdc/entreprise/1 Recherche : curl -XPOST http://localhost:9200/rdc/entreprise/_search curl -XPOST http://localhost:9200/rdc/_search curl -XPOST http://localhost:9200/_search
  12. 12. INDEXER UN DOCUMENT curl -XPUT http://localhost:9200/rdc/entreprise/1 -d ' { "name": "nyroDev", "responsable": "Cédric Nirousset", "description": "Développeur web", "activite_principale": "Développement web", "activite_secondaire": "Hébergement web, conseils", "commune": { "name": "Besançon", "code_postal": "25000" } }' Réponse : { "ok": true, "_index": "rdc", "_type": "entreprise", "_id": "1" }
  13. 13. GAGNER DU TEMPS DE DÉVELOPPEMENT De nombreuses librairies dans beaucoup de langages existes pour faire des requêtes en objet Elastica en PHP Des libraires permettent d'ajouter/modifier/supprimer les données avec les modifs en Base de données Avec Symfony, FOSElasticaBundle
  14. 14. RIVERS C'est Elastic Search qui va lire et indexer les données. CouchDb MongoDb JDBC (pour MySQL par exemple) RabbitMQ Twitter Wikipedia FileSystem IMAP/POP3 Email RSS Git ou GitHub Et plein d'autres
  15. 15. CHERCHER curl -XPOST http://localhost:9200/rdc/entreprise/_search?q=nyrodev Résultat : { "took": 1, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 1, "max_score": 0.61319745, "hits": [{ "_index": "rdc", "_type": "entreprise", "_id": "1", "_score": 0.61319745, "_source": { "name": "nyroDev", /* ... */ } }] } }
  16. 16. LES RÉSULTATS 10 résultats sont retournés par défaut paramétrable avec from et size Le tri se fait par défaut sur le _score paramétrable avec _sort
  17. 17. ET SI ON COMPARAIT AVEC MYSQL ? Recherche global sur tout l'index rdc (entreprise, publicité, communes, etc...) http://localhost:9200/rdc/_search?q=nyrodev 8ms http://localhost:9200/rdc/_search?q=nyrodev nirousset 11ms 12 ms en MySQL juste sur le nom de l'entreprise
  18. 18. QUERY DSL Possibilité de faire des recherches précises curl -XPOST http://localhost:9200/rdc/entreprise/_search -d ' { "query": { "bool": { "must": [{ "query_string": { "query": "développeur" } }], "must_not": [{ "query_string": { "query": "chameau" } }], "should": [{ "query_string": { "query": "web" } }] } } }'
  19. 19. QUERY OU FILTER On peut affiné une recherche avec des query ou des filters. On retrouve beaucoup de query et filter qui font la même chose. Comment faire la différence ? Filter : Mis en cache mais n'influence par le score Certains Query peuvent contenir des filter Donc : Utiliser des filter le plus possible
  20. 20. QUELQUES AUTRES TYPES DE RECHERCHES Range : Un intervalle de chiffres ou date Prefix : Mot commençant par Geodistance : A moins de X km d'un point GPS Regexp : Expression régulière Match All : Pour récupérer toutes les données
  21. 21. LES FACETTES OU AGGREGATION DEPUIS 1.1 Avec une recherche, on peut demander des compteurs sur les données Compteurs sur les terms Intervalles sur des chiffres ou dates Intervalles sur des distances GPS
  22. 22. AGGRÉGATION SUR LES MOTS curl -XPOST http://localhost:9200/rdc/entreprise/_search -d ' { "query": { /* ... */ }, "aggs": { "words": { "terms": { "field": "activite_principale" } } } }' Résultats { "took": 150, "hits": { /* ... */ } "aggregations": { "words": { "buckets": [ { "key": "de", "doc_count": 169 }, { "key": "coiffure", "doc_count": 166 }, { "key": "restaurant", "doc_count": 158 }, /* ... */ ] } } }
  23. 23. AGGRÉGATION SUR LES MOTS AVEC QUERY curl -XPOST http://localhost:9200/rdc/entreprise/_search -d ' { "query": { "term": { "activite_principale": "restaurant" } }, "aggs": { "words": { "terms": { "field": "activite_secondaire" } } } }' Résultats { "took": 68, "hits": { /* ... */ } "aggregations": { "words": { "buckets": [ { "key": "bar", "doc_count": 41 }, { "key": "pizzeria", "doc_count": 18 }, { "key": "traiteur", "doc_count": 11 }, /* ... */ ] } } }
  24. 24. AGGRÉGATION SUR LES DATES curl -XPOST http://localhost:9200/rdc/entreprise/_search -d ' { "aggs": { "dates": { "date_histogram": { "field": "updated", "interval": "day", "format": "yyyy-MM-dd" } } } }' Résultats { "took": 66, "hits": { /* ... */ } "aggregations": { "dates": { "buckets": [ { "key_as_string": "2014-10-01", "doc_count": 123}, { "key_as_string": "2014-10-02", "doc_count": 8}, { "key_as_string": "2014-10-03", "doc_count": 23}, /* ... */ ] } } }
  25. 25. ET D'AUTRES... Aggrégation d'aggrégations Geo distance Filter (pour des aggrégations encore plus spécifiques) Intervalle pour nombres ou date
  26. 26. POUR ALLER PLUS LOIN Mappings pour indiquer les types de données Analyzers et Tokenizers Suggesters pour autocompletion avancée et rapide Script pour custom score et autres... (ressemble à du JavaScript) Percolators : enregister les requêtes pour ensuite récupérer les requêtes qui matchent un document
  27. 27. AVANT LA MISE EN PROD Protéger l'accès à ElasticSearch (port 9200) ou n'écouter qu'en local avec la configuration network.host: 127.0.0.1 Laisser 1 porte via nginx: server { listen 9292; server_name domain.tld; auth_basic "RESTRICTED ACCESS"; auth_basic_user_file /var/my/access/.htpasswd; location / { proxy_pass http://localhost:9200; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; } }
  28. 28. INSTALLER 2 PLUGINS Bigdesk pour monitoring et review de la santé de son serveur Head pour avoir une vision global sur son cluster via son navigateur et exécuter des requêtes
  29. 29. C'EST UN ELK ÉLAN OU WAPITI Elasticsearch Logstash : Indexer des log dans Elasticsearch et les analyser Kibana : Visualitaion des données ElasticSearch en dashboard et graphiques
  30. 30. QUESTIONS ? MERCI.
  31. 31. APRÈS LE DIGITAL APÉRO Doc : elasticsearch.org/guide/ JDBC River pour indexation SQL Indexer des fichiers (depuis 1.4) : Attachement Mapping More Like this : ou Query API Infos sur la résilience

×