Upload
ashish-kumar
View
258
Download
0
Embed Size (px)
Citation preview
Introduction to ElasticSearch
Ashish@ashish_fagna
Elasticsearch real time,search and
analytics engine
Elasticsearch real
time,search andanalytics
engine
distributed
real time,search
andanalytics engine
distributed
scalesmassively
Elasticsearch
Elasticsearch real time,
search andanalytics
engine
distributed
scales massively
high availability
Elasticsearchreal time,
search andanalytics engine
distributed
scales massively high availability
RESTful API
Elasticsearchreal time,
search andanalytics engine
distributed
scales massively high availability
RESTful API
JSONover HTTP
Elasticsearchreal time,
search and distributed
scales massively high availability
RESTful API
JSONover HTTP
schema analytics engine
free
Elasticsearchreal time,
search andanalytics engine
distributed
scales massively
RESTful API
JSONover HTTP
high availability
schema free
multi tenancy
Elasticsearchreal time,
search andanalytics engine
distributed
open-source
scalesmassively
RESTful API
JSONover HTTP
high availability
schema free
multi tenancy
Elasticsearchreal time,
search andanalytics engine
Lucene based
distributed
open-source scalesmassive
ly
RESTful API
JSONover HTTP
high availability
schema free
multi tenancy
> ./bin/elasticsearch
> _
Usage
> curl -XGET localhost:9200/?pretty
> curl -XGET localhost:9200/?pretty
verb
> curl -XGET localhost:9200/?pretty
node
> curl -XGET localhost:9200/?pretty
HTTP port
> curl -XGET localhost:9200/?pretty
path
> curl -XGET localhost:9200/?pretty
query string
> curl -XGET localhost:9200/?pretty
GET /
GET /
{Man",for Search",
: "Exploding: "You Know,: true,: 200,: {
"name" "tagline" "ok" "status" "version""number""snapshot_build"
:"0.90.1",
: false}}
Where do we start?
With data
{is AWESOME","tweet":
"nick":"name":"date":"rt" :"loc":"lat":"lon":
"I think #elasticsearch "@ashish", "Ashish K", "2016-01-01",5,{ 13.4,52.5
}
Saving in ElasticSearch
PUT /index/type/id
PUT /index/type/id
where?
PUT /myapp/type/id
PUT /myapp/type/id
what?
PUT /myapp/tweet/id
PUT /myapp/tweet/id
which?
PUT /myapp/tweet/1
PUT /myapp/tweet/1 -d '{
is AWESOME","I think #elasticsearch "@ashish", "Ashish Kumar", "2013-06-03",5,{ 77,13.5
"tweet":"nick":"name":"date":"rt":"loc":"lat":"lon":
}}'
{"_index":"_type":"_id": "_version": "ok":
"myapp","tweet","1",1,true
}
# 201 CREATED
Get
GET /myapp/tweet/1
{"_index":"_type":"_id": "_version": "exists": "_source":
"myapp","tweet","1",1,true,{...OUR
TWEET... }}
# 200 OK
Update
PUT /myapp/tweet/1 -d '{
is AWESOME","I know #elasticsearch "@ashish", "Ashish Kumar", "2016-01-01",5,{ 77,13.5
"tweet":"nick":"name":"date":"rt":"loc":"lat":"lon":
}}'
{"_index":"_type":"_id": "_version": "ok":
"myapp","tweet","1",2,true
}
# 200 OK
Delete
DELETE /myapp/tweet/1
{"_index": "myapp","_type": "tweet","_id": "1","_version": 3,"ok": true,"found": true
}
# 200 OK
Cheaper in bulk
Any datastore
Elasticsearch
Client
Mirror external DB
Any datastore
Elasticsearch
Client
Standalone
"Empty" Search
GET /_search
GET /_search{
"took" : 2,
}
GET /_search{
"took" : "timed_out":
2,false,
}
GET /_search{
2,false,
"took" : "timed_out" : "_shards":{ "total" : 10,
"successful" : 10,"failed" : 0
},
}
GET /_search{
2,false,
"took" : "timed_out" : "_shards" :{ "total" : 10,
"successful" : 10,"failed" : 0
14,: 1.0,
[ { ... }]
},"hits" : {
"total" :"max_score" "hits" :
}}
GET /_search
"de","tweet","4",
: {... }, 1.0,
"hits" : [{
"_index" :"_type" :"_id" : "_source""_score"
:},...
]
Multi-index Multi-type
GET /index/_search
GET /index/_search
GET /index1,index2/_search
GET /index/_search
GET /index1,index2/_search
GET /ind*/_search
GET /index/_search
GET /index1,index2/_search
GET /ind*/_search
GET /index/type/_search
GET /index/_search
GET /index1,index2/_search
GET /ind*/_search
GET /index/type/_search
GET /index/type1,type2/_search
GET /index/_search
GET /index1,index2/_search
GET /ind*/_search
GET /index/type/_search
GET /index/type1,type2/_search
GET /index/type*/_search
GET /index/_search
GET /index1,index2/_search
GET /ind*/_search
GET /index/type/_search
GET /index/type1,type2/_search
GET /index/type*/_search
GET /_all/type*/_search
Pagination
Paginationsize = num of
results
Paginationsize = num of resultsfrom = results to skip
GET /_search?size=5&from=0
GET /_search?size=5&from=5
GET /_search?size=5&from=10
Search Lite
Search LiteGET /_search?q=name:john
+tweet:foo +name:john +date:>2013-05-01
+tweet:foo +name:john +date:>2013-05-01
→ percent encoding →
+tweet:foo +name:john +date:>2013-05-01
?q=%2Btweet%3Afoo+%2Bname%3Ajohn+%2Bdate%3A%3E2013-05-01
→ percent encoding →
GET /_search?q=mary
→ user named "Mary"→ tweets by "Mary"→ tweet mentioning "@mary"
GET /_search?q=mary
GET /_search?q=_all:mary
→ user named "Mary"→ tweets by "Mary"→ tweet mentioning "@mary"
_all fieldstring values
from all other fields
GET /_search?q=2016
GET /_search?q=2016
GET /_search?q=2016-01-01
GET /_search?q=2016
GET /_search?q=2016-01-03
GET /_search?q=date:2016-01-03
GET /_search?q=date:2016
datatype differences?
check "mapping"(field definitions)
GET /myapp/tweet/_mapping
GET /myapp/tweet/_mapping{"tweet" : {
"properties" :{"tweet" : { "type" : "string" },
"name" : { "type" : "string" },"nick" : { "type" : "string" },"date" : { "type" : "date" },"rt" : { "type" : "long" },
: "double" },: "double" }
"loc" : {"type": "object", "properties" :
{"lat" : {"type""lon" : {"type"
}}
}}}
date = type:date_all = type:string
normalize terms
"Analysis"
"Analysis"tokenization + normalization
"Analysers"tokenizer + token
filters
standard analyzer
"The Quick Brown Fox jumped
over the Lazy Dog!"
standard analyzer→ standard tokenizer
"The Quick Brown Fox jumped
over the Lazy Dog!"
standard analyzer→ standard tokenizer
The,Quick,Brown,Fox,jumped,
over,the,Lazy,Dog
standard analyzer→ standard tokenizer→ lowercase filter
The,Quick,Brown,Fox,jumped,
over,the,Lazy,Dog
standard analyzer→ standard tokenizer→ lowercase filter
the,quick,brown,fox,jumped,
over,the,lazy,dog
standard analyzer→ standard tokenizer→ lowercase filter→ stopwords filter
the,quick,brown,fox,jumped,
over,the,lazy,dog
standard analyzer→ standard tokenizer→ lowercase filter→ stopwords filter
,quick,brown,fox,jumped,
over, ,lazy,dog
english analyzer→ standard tokenizer→ lowercase filter
the,quick,brown,fox,jumped,
over,the,lazy,dog
Analyzer
{
"type" : "string""type" : "string"
},},
"string", "not_analyzed"
{ "type"{ "type"{ "type"
: "date" },: "long" },: "geo_point" }
"tweet" : { "properties" :
{"tweet" :
{"name" :
{"nick" :
{"type"
:"index" :
},"date" :"rt" :"loc" :
}}}
{"tweet" : {
"properties" :{
"tweet" :
{"type" :
"string","analyzer" : "english"
},},"name" :"nick" :
"type" "index"
{ "type" : "string"{::"string", "not_analyzed"
},"date" :"rt" :
{{"type" :"type" :
"date""long"
},},
}}}"loc" : { "type" : "geo_point" }
Thank You