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)

PDF
Hopper Elasticsearch Hackathon
PPTX
Academy PRO: Querying Elasticsearch
PPTX
ElasticSearch AJUG 2013
PPT
How ElasticSearch lives in my DevOps life
PDF
Elasticsearch Quick Introduction
PDF
Elasticsearch in 15 Minutes
PDF
Elasticsearch And Ruby [RuPy2012]
PDF
Montreal Elasticsearch Meetup
PPTX
Elastic search intro-@lamper
PDF
Kyiv.py #16 october 2015
PDF
Elasticsearch sur Azure : Make sense of your (BIG) data !
PDF
Elasticsearch speed is key
PDF
Elasticsearch and Spark
ODP
Elastic Search
PPTX
Introduction to Elasticsearch with basics of Lucene
PDF
Mastering ElasticSearch with Ruby and Tire
PPTX
曾勇 Elastic search-intro
PDF
Elasticsearch
PDF
Anwendungsfaelle für Elasticsearch
PPTX
ElasticSearch - DevNexus Atlanta - 2014
Hopper Elasticsearch Hackathon
Academy PRO: Querying Elasticsearch
ElasticSearch AJUG 2013
How ElasticSearch lives in my DevOps life
Elasticsearch Quick Introduction
Elasticsearch in 15 Minutes
Elasticsearch And Ruby [RuPy2012]
Montreal Elasticsearch Meetup
Elastic search intro-@lamper
Kyiv.py #16 october 2015
Elasticsearch sur Azure : Make sense of your (BIG) data !
Elasticsearch speed is key
Elasticsearch and Spark
Elastic Search
Introduction to Elasticsearch with basics of Lucene
Mastering ElasticSearch with Ruby and Tire
曾勇 Elastic search-intro
Elasticsearch
Anwendungsfaelle für Elasticsearch
ElasticSearch - DevNexus Atlanta - 2014

Recently uploaded (20)

PPTX
Internet of Everything -Basic concepts details
PDF
zbrain.ai-Scope Key Metrics Configuration and Best Practices.pdf
PPTX
Presentation - Principles of Instructional Design.pptx
PDF
CEH Module 2 Footprinting CEH V13, concepts
PDF
Introduction to MCP and A2A Protocols: Enabling Agent Communication
PDF
The AI Revolution in Customer Service - 2025
PDF
Dell Pro Micro: Speed customer interactions, patient processing, and learning...
PDF
Auditboard EB SOX Playbook 2023 edition.
PDF
Transform-Quality-Engineering-with-AI-A-60-Day-Blueprint-for-Digital-Success.pdf
PDF
Aug23rd - Mulesoft Community Workshop - Hyd, India.pdf
PDF
Advancing precision in air quality forecasting through machine learning integ...
PDF
Electrocardiogram sequences data analytics and classification using unsupervi...
PDF
SaaS reusability assessment using machine learning techniques
PDF
Ensemble model-based arrhythmia classification with local interpretable model...
PDF
AI.gov: A Trojan Horse in the Age of Artificial Intelligence
PDF
LMS bot: enhanced learning management systems for improved student learning e...
PDF
Rapid Prototyping: A lecture on prototyping techniques for interface design
PDF
Decision Optimization - From Theory to Practice
PDF
Planning-an-Audit-A-How-To-Guide-Checklist-WP.pdf
PDF
The-2025-Engineering-Revolution-AI-Quality-and-DevOps-Convergence.pdf
Internet of Everything -Basic concepts details
zbrain.ai-Scope Key Metrics Configuration and Best Practices.pdf
Presentation - Principles of Instructional Design.pptx
CEH Module 2 Footprinting CEH V13, concepts
Introduction to MCP and A2A Protocols: Enabling Agent Communication
The AI Revolution in Customer Service - 2025
Dell Pro Micro: Speed customer interactions, patient processing, and learning...
Auditboard EB SOX Playbook 2023 edition.
Transform-Quality-Engineering-with-AI-A-60-Day-Blueprint-for-Digital-Success.pdf
Aug23rd - Mulesoft Community Workshop - Hyd, India.pdf
Advancing precision in air quality forecasting through machine learning integ...
Electrocardiogram sequences data analytics and classification using unsupervi...
SaaS reusability assessment using machine learning techniques
Ensemble model-based arrhythmia classification with local interpretable model...
AI.gov: A Trojan Horse in the Age of Artificial Intelligence
LMS bot: enhanced learning management systems for improved student learning e...
Rapid Prototyping: A lecture on prototyping techniques for interface design
Decision Optimization - From Theory to Practice
Planning-an-Audit-A-How-To-Guide-Checklist-WP.pdf
The-2025-Engineering-Revolution-AI-Quality-and-DevOps-Convergence.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