SlideShare a Scribd company logo
elasticsearch basics workshop mathieu Elie at giroll mardi 17 décembre 13
speaker : @mathieuel • freelance & founder @oneplaylist • full stack skills • see what i’ve done on http://www.mathieuelie.net mardi 17 décembre 13
goal • go from first steps • and get over first frustation • give the you the power needed to learn by yourself mardi 17 décembre 13
install • be sure you have java runtime • apt-get install openjdk-6-jre-headless -y • consider oracle jvm mardi 17 décembre 13
unzip and run ! ## Get the latest stable archive wget https://download.elasticsearch.org/elasticsearch/ elasticsearch/elasticsearch-0.90.7.zip ## Extract the archive unzip elasticsearch-0.90.7.zip cd elasticsearch-0.90.7 ## run ! # This will run elasticsearch on foreground. ./bin/elasticsearch -f mardi 17 décembre 13
its alive ! [2013-12-13 15:45:25,187][INFO ][node ] [Bridge, George Washington] version[0.90.7], pid[37998], build[36897d0/2013-11-13T12:06:54Z] [2013-12-13 15:45:25,189][INFO ][node ] [Bridge, George Washington] initializing ... [2013-12-13 15:45:25,202][INFO ][plugins ] [Bridge, George Washington] loaded [], sites [] [2013-12-13 15:45:28,342][INFO ][node ] [Bridge, George Washington] initialized [2013-12-13 15:45:28,342][INFO ][node ] [Bridge, George Washington] starting ... [2013-12-13 15:45:28,491][INFO ][transport ] [Bridge, George Washington] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/192.168.1.12:9300]} [2013-12-13 15:45:31,545][INFO ][cluster.service ] [Bridge, George Washington] new_master [Bridge, George Washington][pKCdh1b_TP2TlurO1gm4_g][inet[/192.168.1.12:9300]], reason: zen-disco-join (elected_as_master) [2013-12-13 15:45:31,577][INFO ][discovery ] [Bridge, George Washington] elasticsearch/pKCdh1b_TP2TlurO1gm4_g [2013-12-13 15:45:31,595][INFO ][http ] [Bridge, George Washington] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/192.168.1.12:9200]} [2013-12-13 15:45:31,596][INFO ][node ] [Bridge, George Washington] started [2013-12-13 15:45:31,629][INFO ][gateway ] [Bridge, George Washington] recovered [0] indices into cluster_state mardi 17 décembre 13
ping es on port 9200 curl http://127.0.0.1:9200 { "ok" : true, "status" : 200, "name" : "Gideon, Gregory", "version" : { "number" : "0.90.6", "build_hash" : "e2a24efdde0cb7cc1b2071ffbbd1fd874a6d8d6b", "build_timestamp" : "2013-11-04T13:44:16Z", "build_snapshot" : false, "lucene_version" : "4.5.1" }, "tagline" : "You Know, for Search" }% mardi 17 décembre 13
Store a Document curl -XPUT http://localhost:9200/workshop/site/1 -d ' { "url": "http://www.elasticsearch.org", "title": "Open Source Distributed Real Time Search & Analytics", "description": "Elasticsearch is a powerful open source search and analytics engine that makes data easy to explore.", "tags": ["Open Source", "elasticsearch", "Distributed"] }' {"ok":true,"_index":"workshop","_type":"sites","_id":"1","_version":1}% mardi 17 décembre 13
retreive the document curl -XGET http://localhost:9200/workshop/site/1 {"_index":"workshop","_type":"site","_id":"1","_version":2,"exists":true, "_source" : { "url": "http://www.elasticsearch.org", "title": "Open Source Distributed Real Time Search & Analytics", "description": "Elasticsearch is a powerful open source search and analytics engine that makes data easy to explore.", "tags": ["Open Source", "elasticsearch", "Distributed"] }}% mardi 17 décembre 13
add more documents curl -XPUT http://localhost:9200/workshop/site/2 -d ' { "url": "http://www.mathieu-elie.net", "title": "Mathieu ELIE Freelance - Full Stack Data Engineer, Data Visualization", "description": "Freelance Consultant in Bordeaux, System & Software Architect. Love dataviz, redis, elasticsearch, architecture scalability recipes and playing with data.", tags: ["elasticsearch", "Data Visualization"] }' curl -XPUT http://localhost:9200/workshop/site/3 -d ' { "url": "http://www.giroll.org", "title": "Collectif Giroll - Gironde Logiciels Libres", "description": "Giroll, collectif bas√é √à Bordeaux, r√éunis autour des Logiciels et des Cultures libres. Ateliers tous les mardis de 18h30 √à 20h30 et organisation d''Install Party Linux tous les six", tags: ["Open Source", "Collectif"] }' mardi 17 décembre 13
now search ! mardi 17 décembre 13
curl 'http://localhost:9200/workshop/_search?pretty=true' { "took" : 1, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 3, "max_score" : 1.0, "hits" : [ { "_index" : "workshop", "_type" : "site", "_id" : "1", "_score" : 1.0, "_source" : { "url": "http://www.elasticsearch.org", "title": "Open Source Distributed Real Time Search & Analytics", "description": "Elasticsearch is a powerful open source search and analytics engine that makes data easy to explore.", "tags": ["Open Source", "elasticsearch", "Distributed"] } }, { "_index" : "workshop", "_type" : "site", "_id" : "3", "_score" : 1.0, "_source" : { "url": "http://www.giroll.org", "title": "Collectif Giroll - Gironde Logiciels Libres", "description": "Giroll, collectif bas√é √à Bordeaux, r√éunis autour des Logiciels et des Cultures libres. Ateliers tous les mardis de 18h30 √à 20h30 et organisation mardi 17 décembre 13 dInstall Party Linux tous les six",
ok great, but now i want to search for text ! mardi 17 décembre 13
step 1 : pass query as a request body curl -XPOST 'http://localhost:9200/workshop/site/_search?pretty=true' -d '{ "query" : { "match_all" : { } } }' mardi 17 décembre 13
It returns all documents because we use the match all query http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/query-dsl-match-all-query.html mardi 17 décembre 13
match_all query is part of the queries dsl http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/query-dsl-queries.html mardi 17 décembre 13
so lets use the query_string query dsl curl -XPOST 'http://localhost:9200/workshop/site/_search?pretty=true' -d '{ "query" : { "query_string" : { "query" : "elasticsearch" } } }' mardi 17 décembre 13
result is a a quiet verbose lets get only title and tags fields curl -XPOST 'http://localhost:9200/workshop/site/_search?pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } } }' mardi 17 décembre 13
{ "took" : 6, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 2, "max_score" : 0.081366636, "hits" : [ { "_index" : "workshop", "_type" : "site", "_id" : "1", "_score" : 0.081366636, "fields" : { "tags" : [ "Open Source", "elasticsearch", "Distributed" ], "title" : "Open Source Distributed Real Time Search & Analytics" } }, { "_index" : "workshop", "_type" : "site", "_id" : "2", "_score" : 0.06780553, "fields" : { "tags" : [ "elasticsearch", "Data Visualization" ], "title" : "Mathieu ELIE Freelance - Full Stack Data Engineer, Data Visualization" } mardi 17 décembre 13
lets go for facets on tags !! http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/search-facets.html do you see the wall ??? ;) mardi 17 décembre 13
Facets dsl curl -XPOST 'http://localhost:9200/workshop/site/_search?pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } }, "facets" : { "tags" : { "terms" : {"field" : "tags"} } } }' mardi 17 décembre 13
"facets" : { "tags" : { "_type" : "terms", "missing" : 0, "total" : 7, "other" : 0, "terms" : [ { "term" : "elasticsearch", "count" : 2 }, { "term" : "visualization", "count" : 1 }, { "term" : "source", "count" : 1 }, { "term" : "open", "count" : 1 }, { "term" : "distributed", "count" : 1 }, { "term" : "data", "count" : 1 } ] } } mardi 17 décembre 13 ho no!!
• hey ! see "Open Source" ! it is lower cased and exploded in multiple tokens ! • this is done by the defautl mapping and analyzer mardi 17 décembre 13
curl 'http://localhost:9200/workshop/site/_mapping?pretty=true' { "site" : { "properties" : { "description" : { "type" : "string" }, "tags" : { "type" : "string" }, "title" : { "type" : "string" }, "url" : { "type" : "string" } } } } mardi 17 décembre 13
• tags is a type of string and we have a default analyzer • http://www.elasticsearch.org/guide/en/ elasticsearch/reference/current/analysisstandard-analyzer.html • An analyzer of type standard is built using the Standard Tokenizer with the Standard Token Filter, Lower Case Token Filter, and Stop Token Filter. mardi 17 décembre 13
test the default analyzer curl -XGET 'localhost:9200/workshop/_analyze?pretty=true' -d 'Open Source' { "tokens" : [ { "token" : "open", "start_offset" : 0, "end_offset" : 4, "type" : "<ALPHANUM>", "position" : 1 }, { "token" : "source", "start_offset" : 5, "end_offset" : 11, "type" : "<ALPHANUM>", "position" : 2 } ] } mardi 17 décembre 13
• what about keyword analyzer ? • http://www.elasticsearch.org/guide/en/ elasticsearch/reference/current/analysiskeyword-analyzer.html mardi 17 décembre 13
curl -XGET 'localhost:9200/workshop/_analyze? analyzer=keyword&pretty=true' -d 'Open Source' { "tokens" : [ { "token" : "Open Source", "start_offset" : 0, "end_offset" : 11, "type" : "word", "position" : 1 } ] } got it ! now how to apply this to our tags field ? mardi 17 décembre 13
curl { 'http://localhost:9200/workshop/site/_mapping?pretty=true' -d ' "site" : { "properties" : { "url" : {"type" : "string"}, "title" : {"type" : "string"}, "description" : {"type" : "string"}, "tags" : {"type" : "string", "analyzer": "keyword" } } } } ' { "error" : "MergeMappingException[Merge failed with failures {[mapper [tags] has different index_analyzer]}]", "status" : 400 } oops ! we need to drop something.. mardi 17 décembre 13
curl -XDELETE 'http://localhost:9200/workshop/' {"ok":true,"acknowledged":true}% # index should exists if we want to put mapping.. curl -XPUT 'http://localhost:9200/workshop/' {"ok":true,"acknowledged":true}% curl { 'http://localhost:9200/workshop/site/_mapping?pretty=true' -d ' "site" : { "properties" : { "url" : {"type" : "string"}, "title" : {"type" : "string"}, "description" : {"type" : "string"}, "tags" : {"type" : "string", "analyzer": "keyword" } } } } ' {"ok":true,"acknowledged":true}% mardi 17 décembre 13
# test on the field analysis curl -XGET 'localhost:9200/workshop/_analyze? pretty=true&field=site.tags' -d 'Open Source' { "tokens" : [ { "token" : "Open Source", "start_offset" : 0, "end_offset" : 11, "type" : "word", "position" : 1 } ] } # congrats ! mardi 17 décembre 13
# lets push data again curl -XPUT http://localhost:9200/workshop/site/1 -d ' { "url": "http://www.elasticsearch.org", "title": "Open Source Distributed Real Time Search & Analytics", "description": "Elasticsearch is a powerful open source search and analytics engine that makes data easy to explore.", "tags": ["Open Source", "elasticsearch", "Distributed"] }' curl -XPUT http://localhost:9200/workshop/site/2 -d ' { "url": "http://www.mathieu-elie.net", "title": "Mathieu ELIE Freelance - Full Stack Data Engineer, Data Visualization", "description": "Freelance Consultant in Bordeaux, System &amp; Software Architect. Love dataviz, redis, elasticsearch, architecture scalability recipes and playing with data.", tags: ["elasticsearch", "Data Visualization"] }' curl -XPUT http://localhost:9200/workshop/site/3 -d ' { "url": "http://www.giroll.org", "title": "Collectif Giroll - Gironde Logiciels Libres", "description": "Giroll, collectif bas√é √à Bordeaux, r√éunis autour des Logiciels et des Cultures libres. Ateliers tous les mardis de 18h30 √ mardi 17 décembre 13
# faceting ok ??? curl -XPOST 'http://localhost:9200/workshop/site/_search? pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } }, "facets" : { "tags" : { "terms" : {"field" : "tags"} } } }' mardi 17 décembre 13
"facets" : { "tags" : { "_type" : "terms", "missing" : 0, "total" : 5, "other" : 0, "terms" : [ { "term" : "elasticsearch", "count" : 2 }, { "term" : "Open Source", "count" : 1 }, { "term" : "Distributed", "count" : 1 }, { "term" : "Data Visualization", "count" : 1 } ] } } cool ! our facets contains whole tags ! great jobs !! mardi 17 décembre 13
if want only docs with "Open Source" tag we use filters http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/query-dsl-filters.html and term filter mardi 17 décembre 13
curl -XGET 'http://localhost:9200/workshop/site/_search? pretty=true' -d '{ "query" : { "match_all" : { } }, "filter" : { "term" : { "tags" : "Open Source"} } }' • more efficient than full text search • cached / indexed • you can filter using facet items mardi 17 décembre 13
RTFM WAY • elasticsearch doc is great • but it is exhaustive • so at the beguining its a bit frustrating mardi 17 décembre 13
Think about json hierachy curl -XPOST 'http://localhost:9200/workshop/site/_search? pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } }, "facets" : { "tags" : { "terms" : {"field" : "tags"} } } }' mardi 17 décembre 13
your hitting the search api http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/search-search.html curl -XPOST 'http://localhost:9200/workshop/site/_search? pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } }, "facets" : { "tags" : { "terms" : {"field" : "tags"} } } }' mardi 17 décembre 13
your using the query dsl http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/query-dsl.html curl -XPOST 'http://localhost:9200/workshop/site/_search? pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } }, "facets" : { "tags" : { "terms" : {"field" : "tags"} } } }' mardi 17 décembre 13
your using different types of queries http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/query-dsl-queries.html curl -XPOST 'http://localhost:9200/workshop/site/_search? pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } }, "facets" : { "tags" : { "terms" : {"field" : "tags"} } } }' mardi 17 décembre 13
this query is a query_string type with a query parameter set to elasticsearch http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/query-dsl-query-string-query.html curl -XPOST 'http://localhost:9200/workshop/site/_search? pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } }, "facets" : { "tags" : { "terms" : {"field" : "tags"} } } }' mardi 17 décembre 13
we also use faceting http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/search-facets.html curl -XPOST 'http://localhost:9200/workshop/site/_search? pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } }, "facets" : { "tags" : { "terms" : {"field" : "tags"} } } }' mardi 17 décembre 13
we use a terms facet http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/search-facets-terms-facet.html curl -XPOST 'http://localhost:9200/workshop/site/_search? pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } }, "facets" : { "tags" : { "terms" : {"field" : "tags"} } } }' mardi 17 décembre 13
RTFM WAY • common mistake: the code example are not showing always whole query • so you should replace the code in the doc in the whole dsl hierarchy • think about hierarchy and everything should be more clear mardi 17 décembre 13
the end for me... the begguining for you... mardi 17 décembre 13
questions and more • twitter @mathieuel • contact on my freelance website • http://www.mathieu-elie.net • thanks to giroll for hosting this workshop ! mardi 17 décembre 13

More Related Content

What's hot (19)

PDF
CouchDB Open Source Bridge
Chris Anderson
 
PDF
Elasticsearch in 15 minutes
David Pilato
 
PPTX
Drupal 6 to 7 migration
Adelle Frank
 
PDF
When big data meet python @ COSCUP 2012
Jimmy Lai
 
PDF
Code decoupling from Symfony (and others frameworks) - PHP Conference Brasil ...
Miguel Gallardo
 
PDF
The Bixo Web Mining Toolkit
Tom Croucher
 
PDF
Spiders, Chatbots, and the Future of Metadata: A look inside the BNC BiblioSh...
BookNet Canada
 
PDF
Web History 101, or How the Future is Unwritten
BookNet Canada
 
PPTX
Introduction to ELK
YuHsuan Chen
 
PDF
Introduction to Elasticsearch
Jason Austin
 
PPTX
Big data at scrapinghub
Dana Brophy
 
PDF
Distributed percolator in elasticsearch
martijnvg
 
PPTX
ElasticSearch for data mining
William Simms
 
PDF
Elasticsearch Introduction at BigData meetup
Eric Rodriguez (Hiring in Lex)
 
PPTX
Amazing Speed: Elasticsearch for the .NET Developer- Adrian Carr, Codestock 2015
Adrian Carr
 
PDF
Getting started with Scrapy in Python
Viren Rajput
 
PDF
ArangoDB – A different approach to NoSQL
ArangoDB Database
 
PDF
Apache CouchDB Presentation @ Sept. 2104 GTALUG Meeting
Myles Braithwaite
 
PPTX
An Introduction to Elastic Search.
Jurriaan Persyn
 
CouchDB Open Source Bridge
Chris Anderson
 
Elasticsearch in 15 minutes
David Pilato
 
Drupal 6 to 7 migration
Adelle Frank
 
When big data meet python @ COSCUP 2012
Jimmy Lai
 
Code decoupling from Symfony (and others frameworks) - PHP Conference Brasil ...
Miguel Gallardo
 
The Bixo Web Mining Toolkit
Tom Croucher
 
Spiders, Chatbots, and the Future of Metadata: A look inside the BNC BiblioSh...
BookNet Canada
 
Web History 101, or How the Future is Unwritten
BookNet Canada
 
Introduction to ELK
YuHsuan Chen
 
Introduction to Elasticsearch
Jason Austin
 
Big data at scrapinghub
Dana Brophy
 
Distributed percolator in elasticsearch
martijnvg
 
ElasticSearch for data mining
William Simms
 
Elasticsearch Introduction at BigData meetup
Eric Rodriguez (Hiring in Lex)
 
Amazing Speed: Elasticsearch for the .NET Developer- Adrian Carr, Codestock 2015
Adrian Carr
 
Getting started with Scrapy in Python
Viren Rajput
 
ArangoDB – A different approach to NoSQL
ArangoDB Database
 
Apache CouchDB Presentation @ Sept. 2104 GTALUG Meeting
Myles Braithwaite
 
An Introduction to Elastic Search.
Jurriaan Persyn
 

Viewers also liked (20)

PPT
Ruby eventmachine pres at rubybdx
Mathieu Elie
 
PPT
ruby + websocket + haproxy
Mathieu Elie
 
PPTX
Trabajo de fisioquímica
Daniel Armiijos
 
DOC
Sourabh Resume.2
Sourabh Vohra
 
PDF
Discovery ct750 hd book
Jhon Arriaga Cordova
 
PDF
ESTADO DE DIREITO - 42 EDIÇÃO
Estadodedireito
 
PDF
Miyuki iiyama-charcoal-tree-based-bioenergy-icraf-may2015
World Agroforestry (ICRAF)
 
PPTX
Water pollution caused by toxic substances
shenaemhe14
 
PPTX
Unidad de innovación seminario innovación
Andoni Carrion
 
PDF
El marketing no está muerto
Cristina Palacios
 
PDF
Hadoop 2.0 handout 5.0
Manaranjan Pradhan
 
PPTX
Elasticsearch 5.0 les nouveautés
Mathieu Elie
 
PPTX
Hadoop: Components and Key Ideas, -part1
Sandeep Kunkunuru
 
PPT
PriceMinister Rakuten Campus 2013 : Présentation par SoColissimo, partenaire ...
PriceMinister
 
PPSX
Digital signature
Nisha Menon K
 
PPT
Big data hbase
ANSHUL GUPTA
 
PDF
Workshop: Learning Elasticsearch
Anurag Patel
 
PPTX
Hadoop workshop
Fang Mac
 
PDF
ApEjes2010
Julio Vergara Aimone
 
PDF
Kenya top100-companies-2016
East Africa Kenya Top 100
 
Ruby eventmachine pres at rubybdx
Mathieu Elie
 
ruby + websocket + haproxy
Mathieu Elie
 
Trabajo de fisioquímica
Daniel Armiijos
 
Sourabh Resume.2
Sourabh Vohra
 
Discovery ct750 hd book
Jhon Arriaga Cordova
 
ESTADO DE DIREITO - 42 EDIÇÃO
Estadodedireito
 
Miyuki iiyama-charcoal-tree-based-bioenergy-icraf-may2015
World Agroforestry (ICRAF)
 
Water pollution caused by toxic substances
shenaemhe14
 
Unidad de innovación seminario innovación
Andoni Carrion
 
El marketing no está muerto
Cristina Palacios
 
Hadoop 2.0 handout 5.0
Manaranjan Pradhan
 
Elasticsearch 5.0 les nouveautés
Mathieu Elie
 
Hadoop: Components and Key Ideas, -part1
Sandeep Kunkunuru
 
PriceMinister Rakuten Campus 2013 : Présentation par SoColissimo, partenaire ...
PriceMinister
 
Digital signature
Nisha Menon K
 
Big data hbase
ANSHUL GUPTA
 
Workshop: Learning Elasticsearch
Anurag Patel
 
Hadoop workshop
Fang Mac
 
Kenya top100-companies-2016
East Africa Kenya Top 100
 
Ad

Similar to elasticsearch basics workshop (20)

PDF
Hopper Elasticsearch Hackathon
imotov
 
PPTX
Academy PRO: Querying Elasticsearch
Binary Studio
 
PPTX
ElasticSearch AJUG 2013
Roy Russo
 
PPT
How ElasticSearch lives in my DevOps life
琛琳 饶
 
PDF
Elasticsearch Quick Introduction
imotov
 
PDF
Elasticsearch in 15 Minutes
Karel Minarik
 
PDF
Elasticsearch And Ruby [RuPy2012]
Karel Minarik
 
PDF
Montreal Elasticsearch Meetup
Loïc Bertron
 
PPTX
Elastic search intro-@lamper
medcl
 
PDF
Kyiv.py #16 october 2015
Andrii Soldatenko
 
PDF
Elasticsearch sur Azure : Make sense of your (BIG) data !
Microsoft
 
PDF
Elasticsearch speed is key
Enterprise Search Warsaw Meetup
 
PDF
Elasticsearch and Spark
Audible, Inc.
 
ODP
Elastic Search
NexThoughts Technologies
 
PPTX
Introduction to Elasticsearch with basics of Lucene
Rahul Jain
 
PDF
Mastering ElasticSearch with Ruby and Tire
Luca Bonmassar
 
PPTX
曾勇 Elastic search-intro
Shaoning Pan
 
PDF
Elasticsearch
Andrii Gakhov
 
PDF
Anwendungsfaelle für Elasticsearch
Florian Hopf
 
PPTX
ElasticSearch - DevNexus Atlanta - 2014
Roy Russo
 
Hopper Elasticsearch Hackathon
imotov
 
Academy PRO: Querying Elasticsearch
Binary Studio
 
ElasticSearch AJUG 2013
Roy Russo
 
How ElasticSearch lives in my DevOps life
琛琳 饶
 
Elasticsearch Quick Introduction
imotov
 
Elasticsearch in 15 Minutes
Karel Minarik
 
Elasticsearch And Ruby [RuPy2012]
Karel Minarik
 
Montreal Elasticsearch Meetup
Loïc Bertron
 
Elastic search intro-@lamper
medcl
 
Kyiv.py #16 october 2015
Andrii Soldatenko
 
Elasticsearch sur Azure : Make sense of your (BIG) data !
Microsoft
 
Elasticsearch speed is key
Enterprise Search Warsaw Meetup
 
Elasticsearch and Spark
Audible, Inc.
 
Elastic Search
NexThoughts Technologies
 
Introduction to Elasticsearch with basics of Lucene
Rahul Jain
 
Mastering ElasticSearch with Ruby and Tire
Luca Bonmassar
 
曾勇 Elastic search-intro
Shaoning Pan
 
Elasticsearch
Andrii Gakhov
 
Anwendungsfaelle für Elasticsearch
Florian Hopf
 
ElasticSearch - DevNexus Atlanta - 2014
Roy Russo
 
Ad

Recently uploaded (20)

PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PPT
Ericsson LTE presentation SEMINAR 2010.ppt
npat3
 
PDF
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
PDF
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
DOCX
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
PDF
UiPath DevConnect 2025: Agentic Automation Community User Group Meeting
DianaGray10
 
PPTX
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
PDF
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PPTX
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
PDF
Biography of Daniel Podor.pdf
Daniel Podor
 
PDF
Automating Feature Enrichment and Station Creation in Natural Gas Utility Net...
Safe Software
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
Ericsson LTE presentation SEMINAR 2010.ppt
npat3
 
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
UiPath DevConnect 2025: Agentic Automation Community User Group Meeting
DianaGray10
 
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
Biography of Daniel Podor.pdf
Daniel Podor
 
Automating Feature Enrichment and Station Creation in Natural Gas Utility Net...
Safe Software
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 

elasticsearch basics workshop

  • 1. elasticsearch basics workshop mathieu Elie at giroll mardi 17 décembre 13
  • 2. speaker : @mathieuel • freelance & founder @oneplaylist • full stack skills • see what i’ve done on http://www.mathieuelie.net mardi 17 décembre 13
  • 3. goal • go from first steps • and get over first frustation • give the you the power needed to learn by yourself mardi 17 décembre 13
  • 4. install • be sure you have java runtime • apt-get install openjdk-6-jre-headless -y • consider oracle jvm mardi 17 décembre 13
  • 5. unzip and run ! ## Get the latest stable archive wget https://download.elasticsearch.org/elasticsearch/ elasticsearch/elasticsearch-0.90.7.zip ## Extract the archive unzip elasticsearch-0.90.7.zip cd elasticsearch-0.90.7 ## run ! # This will run elasticsearch on foreground. ./bin/elasticsearch -f mardi 17 décembre 13
  • 6. its alive ! [2013-12-13 15:45:25,187][INFO ][node ] [Bridge, George Washington] version[0.90.7], pid[37998], build[36897d0/2013-11-13T12:06:54Z] [2013-12-13 15:45:25,189][INFO ][node ] [Bridge, George Washington] initializing ... [2013-12-13 15:45:25,202][INFO ][plugins ] [Bridge, George Washington] loaded [], sites [] [2013-12-13 15:45:28,342][INFO ][node ] [Bridge, George Washington] initialized [2013-12-13 15:45:28,342][INFO ][node ] [Bridge, George Washington] starting ... [2013-12-13 15:45:28,491][INFO ][transport ] [Bridge, George Washington] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/192.168.1.12:9300]} [2013-12-13 15:45:31,545][INFO ][cluster.service ] [Bridge, George Washington] new_master [Bridge, George Washington][pKCdh1b_TP2TlurO1gm4_g][inet[/192.168.1.12:9300]], reason: zen-disco-join (elected_as_master) [2013-12-13 15:45:31,577][INFO ][discovery ] [Bridge, George Washington] elasticsearch/pKCdh1b_TP2TlurO1gm4_g [2013-12-13 15:45:31,595][INFO ][http ] [Bridge, George Washington] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/192.168.1.12:9200]} [2013-12-13 15:45:31,596][INFO ][node ] [Bridge, George Washington] started [2013-12-13 15:45:31,629][INFO ][gateway ] [Bridge, George Washington] recovered [0] indices into cluster_state mardi 17 décembre 13
  • 7. ping es on port 9200 curl http://127.0.0.1:9200 { "ok" : true, "status" : 200, "name" : "Gideon, Gregory", "version" : { "number" : "0.90.6", "build_hash" : "e2a24efdde0cb7cc1b2071ffbbd1fd874a6d8d6b", "build_timestamp" : "2013-11-04T13:44:16Z", "build_snapshot" : false, "lucene_version" : "4.5.1" }, "tagline" : "You Know, for Search" }% mardi 17 décembre 13
  • 8. Store a Document curl -XPUT http://localhost:9200/workshop/site/1 -d ' { "url": "http://www.elasticsearch.org", "title": "Open Source Distributed Real Time Search & Analytics", "description": "Elasticsearch is a powerful open source search and analytics engine that makes data easy to explore.", "tags": ["Open Source", "elasticsearch", "Distributed"] }' {"ok":true,"_index":"workshop","_type":"sites","_id":"1","_version":1}% mardi 17 décembre 13
  • 9. retreive the document curl -XGET http://localhost:9200/workshop/site/1 {"_index":"workshop","_type":"site","_id":"1","_version":2,"exists":true, "_source" : { "url": "http://www.elasticsearch.org", "title": "Open Source Distributed Real Time Search & Analytics", "description": "Elasticsearch is a powerful open source search and analytics engine that makes data easy to explore.", "tags": ["Open Source", "elasticsearch", "Distributed"] }}% mardi 17 décembre 13
  • 10. add more documents curl -XPUT http://localhost:9200/workshop/site/2 -d ' { "url": "http://www.mathieu-elie.net", "title": "Mathieu ELIE Freelance - Full Stack Data Engineer, Data Visualization", "description": "Freelance Consultant in Bordeaux, System &amp; Software Architect. Love dataviz, redis, elasticsearch, architecture scalability recipes and playing with data.", tags: ["elasticsearch", "Data Visualization"] }' curl -XPUT http://localhost:9200/workshop/site/3 -d ' { "url": "http://www.giroll.org", "title": "Collectif Giroll - Gironde Logiciels Libres", "description": "Giroll, collectif bas√é √à Bordeaux, r√éunis autour des Logiciels et des Cultures libres. Ateliers tous les mardis de 18h30 √à 20h30 et organisation d''Install Party Linux tous les six", tags: ["Open Source", "Collectif"] }' mardi 17 décembre 13
  • 11. now search ! mardi 17 décembre 13
  • 12. curl 'http://localhost:9200/workshop/_search?pretty=true' { "took" : 1, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 3, "max_score" : 1.0, "hits" : [ { "_index" : "workshop", "_type" : "site", "_id" : "1", "_score" : 1.0, "_source" : { "url": "http://www.elasticsearch.org", "title": "Open Source Distributed Real Time Search & Analytics", "description": "Elasticsearch is a powerful open source search and analytics engine that makes data easy to explore.", "tags": ["Open Source", "elasticsearch", "Distributed"] } }, { "_index" : "workshop", "_type" : "site", "_id" : "3", "_score" : 1.0, "_source" : { "url": "http://www.giroll.org", "title": "Collectif Giroll - Gironde Logiciels Libres", "description": "Giroll, collectif bas√é √à Bordeaux, r√éunis autour des Logiciels et des Cultures libres. Ateliers tous les mardis de 18h30 √à 20h30 et organisation mardi 17 décembre 13 dInstall Party Linux tous les six",
  • 13. ok great, but now i want to search for text ! mardi 17 décembre 13
  • 14. step 1 : pass query as a request body curl -XPOST 'http://localhost:9200/workshop/site/_search?pretty=true' -d '{ "query" : { "match_all" : { } } }' mardi 17 décembre 13
  • 15. It returns all documents because we use the match all query http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/query-dsl-match-all-query.html mardi 17 décembre 13
  • 16. match_all query is part of the queries dsl http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/query-dsl-queries.html mardi 17 décembre 13
  • 17. so lets use the query_string query dsl curl -XPOST 'http://localhost:9200/workshop/site/_search?pretty=true' -d '{ "query" : { "query_string" : { "query" : "elasticsearch" } } }' mardi 17 décembre 13
  • 18. result is a a quiet verbose lets get only title and tags fields curl -XPOST 'http://localhost:9200/workshop/site/_search?pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } } }' mardi 17 décembre 13
  • 19. { "took" : 6, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 2, "max_score" : 0.081366636, "hits" : [ { "_index" : "workshop", "_type" : "site", "_id" : "1", "_score" : 0.081366636, "fields" : { "tags" : [ "Open Source", "elasticsearch", "Distributed" ], "title" : "Open Source Distributed Real Time Search & Analytics" } }, { "_index" : "workshop", "_type" : "site", "_id" : "2", "_score" : 0.06780553, "fields" : { "tags" : [ "elasticsearch", "Data Visualization" ], "title" : "Mathieu ELIE Freelance - Full Stack Data Engineer, Data Visualization" } mardi 17 décembre 13
  • 20. lets go for facets on tags !! http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/search-facets.html do you see the wall ??? ;) mardi 17 décembre 13
  • 21. Facets dsl curl -XPOST 'http://localhost:9200/workshop/site/_search?pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } }, "facets" : { "tags" : { "terms" : {"field" : "tags"} } } }' mardi 17 décembre 13
  • 22. "facets" : { "tags" : { "_type" : "terms", "missing" : 0, "total" : 7, "other" : 0, "terms" : [ { "term" : "elasticsearch", "count" : 2 }, { "term" : "visualization", "count" : 1 }, { "term" : "source", "count" : 1 }, { "term" : "open", "count" : 1 }, { "term" : "distributed", "count" : 1 }, { "term" : "data", "count" : 1 } ] } } mardi 17 décembre 13 ho no!!
  • 23. • hey ! see "Open Source" ! it is lower cased and exploded in multiple tokens ! • this is done by the defautl mapping and analyzer mardi 17 décembre 13
  • 24. curl 'http://localhost:9200/workshop/site/_mapping?pretty=true' { "site" : { "properties" : { "description" : { "type" : "string" }, "tags" : { "type" : "string" }, "title" : { "type" : "string" }, "url" : { "type" : "string" } } } } mardi 17 décembre 13
  • 25. • tags is a type of string and we have a default analyzer • http://www.elasticsearch.org/guide/en/ elasticsearch/reference/current/analysisstandard-analyzer.html • An analyzer of type standard is built using the Standard Tokenizer with the Standard Token Filter, Lower Case Token Filter, and Stop Token Filter. mardi 17 décembre 13
  • 26. test the default analyzer curl -XGET 'localhost:9200/workshop/_analyze?pretty=true' -d 'Open Source' { "tokens" : [ { "token" : "open", "start_offset" : 0, "end_offset" : 4, "type" : "<ALPHANUM>", "position" : 1 }, { "token" : "source", "start_offset" : 5, "end_offset" : 11, "type" : "<ALPHANUM>", "position" : 2 } ] } mardi 17 décembre 13
  • 27. • what about keyword analyzer ? • http://www.elasticsearch.org/guide/en/ elasticsearch/reference/current/analysiskeyword-analyzer.html mardi 17 décembre 13
  • 28. curl -XGET 'localhost:9200/workshop/_analyze? analyzer=keyword&pretty=true' -d 'Open Source' { "tokens" : [ { "token" : "Open Source", "start_offset" : 0, "end_offset" : 11, "type" : "word", "position" : 1 } ] } got it ! now how to apply this to our tags field ? mardi 17 décembre 13
  • 29. curl { 'http://localhost:9200/workshop/site/_mapping?pretty=true' -d ' "site" : { "properties" : { "url" : {"type" : "string"}, "title" : {"type" : "string"}, "description" : {"type" : "string"}, "tags" : {"type" : "string", "analyzer": "keyword" } } } } ' { "error" : "MergeMappingException[Merge failed with failures {[mapper [tags] has different index_analyzer]}]", "status" : 400 } oops ! we need to drop something.. mardi 17 décembre 13
  • 30. curl -XDELETE 'http://localhost:9200/workshop/' {"ok":true,"acknowledged":true}% # index should exists if we want to put mapping.. curl -XPUT 'http://localhost:9200/workshop/' {"ok":true,"acknowledged":true}% curl { 'http://localhost:9200/workshop/site/_mapping?pretty=true' -d ' "site" : { "properties" : { "url" : {"type" : "string"}, "title" : {"type" : "string"}, "description" : {"type" : "string"}, "tags" : {"type" : "string", "analyzer": "keyword" } } } } ' {"ok":true,"acknowledged":true}% mardi 17 décembre 13
  • 31. # test on the field analysis curl -XGET 'localhost:9200/workshop/_analyze? pretty=true&field=site.tags' -d 'Open Source' { "tokens" : [ { "token" : "Open Source", "start_offset" : 0, "end_offset" : 11, "type" : "word", "position" : 1 } ] } # congrats ! mardi 17 décembre 13
  • 32. # lets push data again curl -XPUT http://localhost:9200/workshop/site/1 -d ' { "url": "http://www.elasticsearch.org", "title": "Open Source Distributed Real Time Search & Analytics", "description": "Elasticsearch is a powerful open source search and analytics engine that makes data easy to explore.", "tags": ["Open Source", "elasticsearch", "Distributed"] }' curl -XPUT http://localhost:9200/workshop/site/2 -d ' { "url": "http://www.mathieu-elie.net", "title": "Mathieu ELIE Freelance - Full Stack Data Engineer, Data Visualization", "description": "Freelance Consultant in Bordeaux, System &amp; Software Architect. Love dataviz, redis, elasticsearch, architecture scalability recipes and playing with data.", tags: ["elasticsearch", "Data Visualization"] }' curl -XPUT http://localhost:9200/workshop/site/3 -d ' { "url": "http://www.giroll.org", "title": "Collectif Giroll - Gironde Logiciels Libres", "description": "Giroll, collectif bas√é √à Bordeaux, r√éunis autour des Logiciels et des Cultures libres. Ateliers tous les mardis de 18h30 √ mardi 17 décembre 13
  • 33. # faceting ok ??? curl -XPOST 'http://localhost:9200/workshop/site/_search? pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } }, "facets" : { "tags" : { "terms" : {"field" : "tags"} } } }' mardi 17 décembre 13
  • 34. "facets" : { "tags" : { "_type" : "terms", "missing" : 0, "total" : 5, "other" : 0, "terms" : [ { "term" : "elasticsearch", "count" : 2 }, { "term" : "Open Source", "count" : 1 }, { "term" : "Distributed", "count" : 1 }, { "term" : "Data Visualization", "count" : 1 } ] } } cool ! our facets contains whole tags ! great jobs !! mardi 17 décembre 13
  • 35. if want only docs with "Open Source" tag we use filters http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/query-dsl-filters.html and term filter mardi 17 décembre 13
  • 36. curl -XGET 'http://localhost:9200/workshop/site/_search? pretty=true' -d '{ "query" : { "match_all" : { } }, "filter" : { "term" : { "tags" : "Open Source"} } }' • more efficient than full text search • cached / indexed • you can filter using facet items mardi 17 décembre 13
  • 37. RTFM WAY • elasticsearch doc is great • but it is exhaustive • so at the beguining its a bit frustrating mardi 17 décembre 13
  • 38. Think about json hierachy curl -XPOST 'http://localhost:9200/workshop/site/_search? pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } }, "facets" : { "tags" : { "terms" : {"field" : "tags"} } } }' mardi 17 décembre 13
  • 39. your hitting the search api http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/search-search.html curl -XPOST 'http://localhost:9200/workshop/site/_search? pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } }, "facets" : { "tags" : { "terms" : {"field" : "tags"} } } }' mardi 17 décembre 13
  • 40. your using the query dsl http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/query-dsl.html curl -XPOST 'http://localhost:9200/workshop/site/_search? pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } }, "facets" : { "tags" : { "terms" : {"field" : "tags"} } } }' mardi 17 décembre 13
  • 41. your using different types of queries http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/query-dsl-queries.html curl -XPOST 'http://localhost:9200/workshop/site/_search? pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } }, "facets" : { "tags" : { "terms" : {"field" : "tags"} } } }' mardi 17 décembre 13
  • 42. this query is a query_string type with a query parameter set to elasticsearch http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/query-dsl-query-string-query.html curl -XPOST 'http://localhost:9200/workshop/site/_search? pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } }, "facets" : { "tags" : { "terms" : {"field" : "tags"} } } }' mardi 17 décembre 13
  • 43. we also use faceting http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/search-facets.html curl -XPOST 'http://localhost:9200/workshop/site/_search? pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } }, "facets" : { "tags" : { "terms" : {"field" : "tags"} } } }' mardi 17 décembre 13
  • 44. we use a terms facet http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/search-facets-terms-facet.html curl -XPOST 'http://localhost:9200/workshop/site/_search? pretty=true' -d '{ "fields" : ["title", "tags"], "query" : { "query_string" : { "query" : "elasticsearch" } }, "facets" : { "tags" : { "terms" : {"field" : "tags"} } } }' mardi 17 décembre 13
  • 45. RTFM WAY • common mistake: the code example are not showing always whole query • so you should replace the code in the doc in the whole dsl hierarchy • think about hierarchy and everything should be more clear mardi 17 décembre 13
  • 46. the end for me... the begguining for you... mardi 17 décembre 13
  • 47. questions and more • twitter @mathieuel • contact on my freelance website • http://www.mathieu-elie.net • thanks to giroll for hosting this workshop ! mardi 17 décembre 13