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

PDF
dataviz on d3.js + elasticsearch
PDF
Data Visualization on the Tech Side
PPT
Data vizualisation: d3.js + sinatra + elasticsearch
PDF
Mongo db php_shaken_not_stirred_joomlafrappe
PDF
Text Analytics Summit 2009 - Roddy Lindsay - "Social Media, Happiness, Petaby...
KEY
NoSQL: Why, When, and How
PDF
ElasticSearch - index server used as a document database
ODP
Cool bonsai cool - an introduction to ElasticSearch
dataviz on d3.js + elasticsearch
Data Visualization on the Tech Side
Data vizualisation: d3.js + sinatra + elasticsearch
Mongo db php_shaken_not_stirred_joomlafrappe
Text Analytics Summit 2009 - Roddy Lindsay - "Social Media, Happiness, Petaby...
NoSQL: Why, When, and How
ElasticSearch - index server used as a document database
Cool bonsai cool - an introduction to ElasticSearch

What's hot (19)

PDF
CouchDB Open Source Bridge
PDF
Elasticsearch in 15 minutes
PPTX
Drupal 6 to 7 migration
PDF
When big data meet python @ COSCUP 2012
PDF
Code decoupling from Symfony (and others frameworks) - PHP Conference Brasil ...
PDF
The Bixo Web Mining Toolkit
PDF
Spiders, Chatbots, and the Future of Metadata: A look inside the BNC BiblioSh...
PDF
Web History 101, or How the Future is Unwritten
PPTX
Introduction to ELK
PDF
Introduction to Elasticsearch
PPTX
Big data at scrapinghub
PDF
Distributed percolator in elasticsearch
PPTX
ElasticSearch for data mining
PDF
Elasticsearch Introduction at BigData meetup
PPTX
Amazing Speed: Elasticsearch for the .NET Developer- Adrian Carr, Codestock 2015
PDF
Getting started with Scrapy in Python
PDF
ArangoDB – A different approach to NoSQL
PDF
Apache CouchDB Presentation @ Sept. 2104 GTALUG Meeting
PPTX
An Introduction to Elastic Search.
CouchDB Open Source Bridge
Elasticsearch in 15 minutes
Drupal 6 to 7 migration
When big data meet python @ COSCUP 2012
Code decoupling from Symfony (and others frameworks) - PHP Conference Brasil ...
The Bixo Web Mining Toolkit
Spiders, Chatbots, and the Future of Metadata: A look inside the BNC BiblioSh...
Web History 101, or How the Future is Unwritten
Introduction to ELK
Introduction to Elasticsearch
Big data at scrapinghub
Distributed percolator in elasticsearch
ElasticSearch for data mining
Elasticsearch Introduction at BigData meetup
Amazing Speed: Elasticsearch for the .NET Developer- Adrian Carr, Codestock 2015
Getting started with Scrapy in Python
ArangoDB – A different approach to NoSQL
Apache CouchDB Presentation @ Sept. 2104 GTALUG Meeting
An Introduction to Elastic Search.
Ad

Viewers also liked (20)

PPT
Ruby eventmachine pres at rubybdx
PPT
ruby + websocket + haproxy
PPTX
Trabajo de fisioquímica
DOC
Sourabh Resume.2
PDF
Discovery ct750 hd book
PDF
ESTADO DE DIREITO - 42 EDIÇÃO
PDF
Miyuki iiyama-charcoal-tree-based-bioenergy-icraf-may2015
PPTX
Water pollution caused by toxic substances
PPTX
Unidad de innovación seminario innovación
PDF
El marketing no está muerto
PDF
Hadoop 2.0 handout 5.0
PPTX
Elasticsearch 5.0 les nouveautés
PPTX
Hadoop: Components and Key Ideas, -part1
PPT
PriceMinister Rakuten Campus 2013 : Présentation par SoColissimo, partenaire ...
PPSX
Digital signature
PPT
Big data hbase
PDF
Workshop: Learning Elasticsearch
PPTX
Hadoop workshop
PDF
PDF
Kenya top100-companies-2016
Ruby eventmachine pres at rubybdx
ruby + websocket + haproxy
Trabajo de fisioquímica
Sourabh Resume.2
Discovery ct750 hd book
ESTADO DE DIREITO - 42 EDIÇÃO
Miyuki iiyama-charcoal-tree-based-bioenergy-icraf-may2015
Water pollution caused by toxic substances
Unidad de innovación seminario innovación
El marketing no está muerto
Hadoop 2.0 handout 5.0
Elasticsearch 5.0 les nouveautés
Hadoop: Components and Key Ideas, -part1
PriceMinister Rakuten Campus 2013 : Présentation par SoColissimo, partenaire ...
Digital signature
Big data hbase
Workshop: Learning Elasticsearch
Hadoop workshop
Kenya top100-companies-2016
Ad

Similar to elasticsearch basics workshop (20)

KEY
Elasticsearch & "PeopleSearch"
PDF
Rapid Prototyping with Solr
PDF
Elasticsearch – mye mer enn søk! [JavaZone 2013]
PDF
Rapid Prototyping with Solr
PDF
Full-Stack Data Science: How to be a One-person Data Team
PDF
Presentationnosqlmah
PDF
Approach to find critical vulnerabilities
PPT
How ElasticSearch lives in my DevOps life
PDF
Mastering ElasticSearch with Ruby and Tire
PDF
elasticsearch
PPTX
ElasticSearch 5.x - New Tricks - 2017-02-08 - Elasticsearch Meetup
KEY
ODP
Elastic Search
PDF
Null Bachaav - May 07 Attack Monitoring workshop.
PDF
Elasticsearch intro output
PDF
Terrastore - A document database for developers
PDF
What Ops Can Learn From Design
PPT
Why and How Powershell will rule the Command Line - Barcamp LA 4
PDF
Managing Your Content with Elasticsearch
PPTX
Elasticsearch & "PeopleSearch"
Rapid Prototyping with Solr
Elasticsearch – mye mer enn søk! [JavaZone 2013]
Rapid Prototyping with Solr
Full-Stack Data Science: How to be a One-person Data Team
Presentationnosqlmah
Approach to find critical vulnerabilities
How ElasticSearch lives in my DevOps life
Mastering ElasticSearch with Ruby and Tire
elasticsearch
ElasticSearch 5.x - New Tricks - 2017-02-08 - Elasticsearch Meetup
Elastic Search
Null Bachaav - May 07 Attack Monitoring workshop.
Elasticsearch intro output
Terrastore - A document database for developers
What Ops Can Learn From Design
Why and How Powershell will rule the Command Line - Barcamp LA 4
Managing Your Content with Elasticsearch

Recently uploaded (20)

PDF
GamePlan Trading System Review: Professional Trader's Honest Take
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Modernizing your data center with Dell and AMD
PDF
Transforming Manufacturing operations through Intelligent Integrations
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PPTX
Cloud computing and distributed systems.
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
PPTX
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
madgavkar20181017ppt McKinsey Presentation.pdf
GamePlan Trading System Review: Professional Trader's Honest Take
Diabetes mellitus diagnosis method based random forest with bat algorithm
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Chapter 3 Spatial Domain Image Processing.pdf
NewMind AI Weekly Chronicles - August'25 Week I
Reach Out and Touch Someone: Haptics and Empathic Computing
The AUB Centre for AI in Media Proposal.docx
Per capita expenditure prediction using model stacking based on satellite ima...
Modernizing your data center with Dell and AMD
Transforming Manufacturing operations through Intelligent Integrations
“AI and Expert System Decision Support & Business Intelligence Systems”
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
Cloud computing and distributed systems.
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
Network Security Unit 5.pdf for BCA BBA.
madgavkar20181017ppt McKinsey Presentation.pdf

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