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

  • View
    523

  • Download
    0

Embed Size (px)

DESCRIPTION

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

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

  • 1. ELASTIC SEARCHDIGITAL APRO SILICONCOMTpar Cdric Nirousset - @Nyr0

2. PRSENTATIONDveloppeur web indpendant depuis 2004PHPSymfonyMySQLIntgration / ResponsiveElastic Searchetc...nyroDev 3. Open sourceUn indexeur de documents (bas sur Apache Lucene)Une API HTTP/RESTFul/JSONDistribuSimple et puissant la foisEn quasi temps relMais ce n'est pas une base de donnes 4. ROUTE DES COMMUNESEditorial et contenus sur :4 dpartements de Franche-Comt67 communauts de communes de Franche-Comt103 cantons de Franche-Comt1 785 communes de Franche-Comt5 000 entreprises de Franche-Comt2 524 activitssoit un total d'environ 9 500 lignes, stockes en MySQL 5. RECHERCHE MYSQL : "NYRODEV"UNIQUEMENT SUR LE TITRESELECT * FROM entreprise WHERE name LIKE "%nyrodev%"12ms 6. RECHERCHE MYSQL : "NYRODEV"SUR LES CHAMPS TEXTESSELECT * FROM entrepriseWHERE name LIKE "%nyrodev%" OR responsable LIKE "%nyrodev%"OR description LIKE "%nyrodev%" OR activite_principale LIKE "%nyrodev%"OR activite_secondaire LIKE "%nyrodev%"13ms 7. RECHERCHE MYSQL : "NYRODEV NIROUSSET"UNIQUEMENT SUR LE TITRESELECT * FROM entreprise WHERE name LIKE "%nyrodev%" AND name LIKE "%nirousset%"13ms0 rsultat 8. RECHERCHE MYSQL : "NYRODEV NIROUSSET"SUR LES CHAMPS TEXTESSELECT * FROM entrepriseWHERE (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. ET ON POURRAIT AJOUTER :D'autres champs textes existantsRecherche sur la commune (jointure)Recherche sur les publicits (jointure)ET ON NE CHERCHE QUE SUR LESENTREPRISES ! 10. QUELQUES TERMESDocument : Un object JSON reprsentant les donnesPenser NoSQL(donc jointures incluses et "applaties")Type : Regroupe des documents du mme typeIndex Espace logique de stockage des documents dont lestypes sont fonctionnellement communs 11. API DE BASE D'ELASTIC SEARCHAPI REST : http://host:port/[index]/[type]/[_action/_id]Documents :curl -XPUT http://localhost:9200/rdc/entreprise/1curl -XGET http://localhost:9200/rdc/entreprise/1curl -XDELETE http://localhost:9200/rdc/entreprise/1Recherche :curl -XPOST http://localhost:9200/rdc/entreprise/_searchcurl -XPOST http://localhost:9200/rdc/_searchcurl -XPOST http://localhost:9200/_search 12. INDEXER UN DOCUMENTcurl -XPUT http://localhost:9200/rdc/entreprise/1 -d '{"name": "nyroDev","responsable": "Cdric Nirousset","description": "Dveloppeur web","activite_principale": "Dveloppement web","activite_secondaire": "Hbergement web, conseils","commune": {"name": "Besanon","code_postal": "25000"}}'Rponse :{"ok": true,"_index": "rdc","_type": "entreprise","_id": "1"} 13. GAGNER DU TEMPS DE DVELOPPEMENTDe nombreuses librairies dans beaucoup de langages existespour faire des requtes en objetElastica en PHPDes libraires permettent d'ajouter/modifier/supprimer lesdonnes avec les modifs en Base de donnesAvec Symfony, FOSElasticaBundle 14. RIVERSC'est Elastic Search qui va lire et indexer les donnes.CouchDbMongoDbJDBC (pour MySQL par exemple)RabbitMQTwitterWikipediaFileSystemIMAP/POP3 EmailRSSGit ou GitHubEt plein d'autres 15. CHERCHERcurl -XPOST http://localhost:9200/rdc/entreprise/_search?q=nyrodevRsultat :{"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. LES RSULTATS10 rsultats sont retourns par dfautparamtrable avec from et sizeLe tri se fait par dfaut sur le _scoreparamtrable avec _sort 17. ET SI ON COMPARAIT AVEC MYSQL ?Recherche global sur tout l'index rdc (entreprise, publicit,communes, etc...)http://localhost:9200/rdc/_search?q=nyrodev8mshttp://localhost:9200/rdc/_search?q=nyrodev nirousset11ms12 ms en MySQL juste sur le nom de l'entreprise 18. QUERY DSLPossibilit de faire des recherches prcisescurl -XPOST http://localhost:9200/rdc/entreprise/_search -d '{"query": {"bool": {"must": [{"query_string": { "query": "dveloppeur" }}],"must_not": [{"query_string": { "query": "chameau" }}],"should": [{"query_string": { "query": "web" }}]}}}' 19. QUERY OU FILTEROn peut affin une recherche avec des query ou des filters.On retrouve beaucoup de query et filter qui font la mme chose.Comment faire la diffrence ?Filter : Mis en cache mais n'influence par le scoreCertains Query peuvent contenir des filterDonc : Utiliser des filter le plus possible 20. QUELQUES AUTRES TYPES DE RECHERCHESRange : Un intervalle de chiffres ou datePrefix : Mot commenant parGeodistance : A moins de X km d'un point GPSRegexp : Expression rgulireMatch All : Pour rcuprer toutes les donnes 21. LES FACETTESOU AGGREGATION DEPUIS 1.1Avec une recherche, on peut demander des compteurs sur lesdonnesCompteurs sur les termsIntervalles sur des chiffres ou datesIntervalles sur des distances GPS 22. AGGRGATION SUR LES MOTScurl -XPOST http://localhost:9200/rdc/entreprise/_search -d '{"query": { /* ... */ },"aggs": {"words": {"terms": { "field": "activite_principale" }}}}'Rsultats{"took": 150,"hits": { /* ... */ }"aggregations": {"words": {"buckets": [{ "key": "de", "doc_count": 169 },{ "key": "coiffure", "doc_count": 166 },{ "key": "restaurant", "doc_count": 158 },/* ... */]}}} 23. AGGRGATION SUR LES MOTS AVEC QUERYcurl -XPOST http://localhost:9200/rdc/entreprise/_search -d '{"query": { "term": { "activite_principale": "restaurant" } },"aggs": {"words": {"terms": { "field": "activite_secondaire" }}}}'Rsultats{"took": 68,"hits": { /* ... */ }"aggregations": {"words": {"buckets": [{ "key": "bar", "doc_count": 41 },{ "key": "pizzeria", "doc_count": 18 },{ "key": "traiteur", "doc_count": 11 },/* ... */]}}} 24. AGGRGATION SUR LES DATEScurl -XPOST http://localhost:9200/rdc/entreprise/_search -d '{"aggs": {"dates": {"date_histogram": { "field": "updated", "interval": "day","format": "yyyy-MM-dd" }}}}'Rsultats{"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. ET D'AUTRES...Aggrgation d'aggrgationsGeo distanceFilter (pour des aggrgations encore plus spcifiques)Intervalle pour nombres ou date 26. POUR ALLER PLUS LOINMappings pour indiquer les types de donnesAnalyzers et TokenizersSuggesters pour autocompletion avance et rapideScript pour custom score et autres... (ressemble duJavaScript)Percolators : enregister les requtes pour ensuite rcuprerles requtes qui matchent un document 27. AVANT LA MISE EN PRODProtger l'accs ElasticSearch (port 9200)ou n'couter qu'en local avec la configurationnetwork.host: 127.0.0.1Laisser 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. INSTALLER 2 PLUGINSBigdesk pour monitoring et review de la sant de son serveurHead pour avoir une vision global sur son cluster via sonnavigateur et excuter des requtes 29. C'EST UN ELKLAN OU WAPITIElasticsearchLogstash : Indexer des log dans Elasticsearch et les analyserKibana : Visualitaion des donnes ElasticSearch en dashboardet graphiques 30. QUESTIONS ?MERCI. 31. APRS LE DIGITAL APRODoc :elasticsearch.org/guide/JDBC River pour indexation SQLIndexer des fichiers (depuis 1.4) :Attachement MappingMore Like this : ouQuery APIInfos sur la rsilience