SlideShare a Scribd company logo
Elasticsearch,
You Know For Search! And More!
Medcl,曾勇(Zeng Yong)
Philips Kokoh Prasetyo
Casey Vu
Arinto Murdopo
Outline
● Real time Search (Philips)
● Aggregation & Analytics (Casey)
● Lesson Learned @LARC (Arinto)
Real-time Search
Real-time Search
● Indexing
○ Mapping
■ How a document, and the fields it contains are stored and indexed
● Simple type: string, date, long, double, boolean, ip
● Hierarchical: object, nested object
● Specialized type: geo_point, geo_shape, completion
○ Analysis
■ How full text is processed to make it searchable
● Standard Analyzer, Simple Analyzer, Language Analyzer, Snowball Analyzer
● Searching
○ Query DSL
■ Flexible and powerful query language used by Elasticsearch
{
“id”: 709260211836485600 ,
“createdAt”: “ Mar 14, 2016 2:09:46 PM ”,
“text”: “ @arinto Just few more days to share #elasticsearch at
#FOSSASIA 2016 https://t.co/PtZk14CNXl ”,
“user”: {
“screenName”: “philipskokoh”,
“name”: “Philips Kokoh”,
...
},
“hashtagEntities”: [
{ “start”: 36, “end”: 50, “text”: “elasticsearch” },
{ “start”: 54, “end”: 63, “text”: “FOSSASIA” }
],
“geoLocation”: {
“latitude”: 1.2971576,
“longitude”: 103.8495769
},
...
}
Mapping
Long
Date
Analyzed String
Nested Object
Geo_point
Object
Analysis
● Standard Analyzer
○ [set, the, shape, to, semi, transparent, by, calling, set_trans, 5]
● Simple Analyzer
○ [set, the, shape, to, semi, transparent, by, calling, set, trans]
● Whitespace Analyzer
○ [Set, the, shape, to, semi-transparent, by, calling, set_trans(5)]
● Language Analyzer, e.g. english, french, spanish, arabic, …
○ English analyzer: [set, shape, semi, transpar, call, set_tran, 5]
A quick brown fox jumps over the
lazy dog. Grumpy wizards make
toxic brew for the evil queen and
jack. How razorback-jumping frogs
can level six piqued gymnasts!
Index
Character
Filters
Tokenizer
Token
Filters
Analyzer
“Set the shape to semi-transparent by calling set_trans(5)”Built-in Analyzer
Searching
Query DSL
● Based on JSON to define queries :)
● Behavior:
○ Query Context
■ Answering: “How well this document match this query clause?”
■ Return: _score → relevance score
○ Filter Context
■ Answering: “Does this document match this query clause?”
■ Return: boolean yes or no
Let’s Search!!
Retrieve tweet containing “elasticsearch” or “fossasia”
published before today by philipskokoh without geoLocation
{
“query”: {
“bool”: {
“must”: [
{“match”: { “text”: “elasticsearch fossasia” }}
],
“filter“: [
{“term”: { “user.screenName”: “philipskokoh” }},
{“range”: { “createdAt”: {“lt”: “now/d” }}}
],
“must_not”: [
{“exists”: { “field”: “geoLocation” }}
]
}
}
}
Let’s Search!!
Retrieve tweet containing “elasticsearch” or “fossasia”
published before today by philipskokoh without geoLocation
{
“query”: {
“bool”: {
“must”: [
{“match”: { “text”: “elasticsearch fossasia” }}
],
“filter“: [
{“term”: { “user.screenName”: “philipskokoh” }},
{“range”: { “createdAt”: {“lt”: “now/d” }}}
],
“must_not”: [
{“exists”: { “field”: “geoLocation” }}
]
}
}
}
{
"took": 22, "timed_out": false,
"_shards": {
"total": 42, "successful": 42, "failed": 0
},
"hits": {
"total": 1, "max_score": 4.0619926,
"hits": [
{
"_index": "plr_sg_tweet_201603",
"_type": "tweet",
"_id": "707403325390520320",
"_score": 4.0619926,
"_source": {
...
"createdAt": "Mar 9, 2016 11:11:10 AM",
"id": 707403325390520300,
"text": "I will be giving a workshop at
#FOSSASIA 2016 titled: Elasticsearch: You know, for
search! and more! https://t.co/FRCQlQdHhHnCome,
join us! ",
"user": {
...
"screenName": "philipskokoh",
"lang": "en",
"name": "Philips Kokoh",
},
"retweetCount": 2,
}
}
]
}
}
Geo Distance Range Query
Retrieve tweets containing fossasia published before
today within 2km from Science Centre
{
“query”: {
“bool”: {
“must”: [
{“match”: { “text”: “mrt” }}
],
“filter”: [
{“range”: { “createdAt”: {“lt”: “now/d” }}},
{“geo_distance_range”: {
“gt”: “0km”, “lt”: “1km”,
“geoLocation”: {
“lat”: 1.332906,
“lon”: 103.736110
}
}}
]
}
}
}
Geo Distance Range Query
Retrieve tweets containing fossasia published before
today within 2km from Science Centre
{
“query”: {
“bool”: {
“must”: [
{“match”: { “text”: “mrt” }}
],
“filter”: [
{“range”: { “createdAt”: {“lt”: “now/d” }}},
{“geo_distance_range”: {
“gt”: “0km”, “lt”: “1km”,
“geoLocation”: {
“lat”: 1.332906,
“lon”: 103.736110
}
}}
]
}
}
}
{
"took": 50, "timed_out": false,
"_shards": {
"total": 42, "successful": 42, "failed": 0
},
"hits": {
"total": 974, "max_score": 3.6536937,
"hits": [
{ ... },
{
"_index": "plr_sg_tweet_201602",
"_type": "tweet",
"_id": "700461563812192256",
"_score": 3.646007,
"_source": {
...
"createdAt": "Feb 19, 2016 7:27:05 AM",
"id": 700461563812192300,
"text": "Mrt slow dao (@ Jurong East MRT
Interchange (NS1/EW24) - @smrt_singapore in
Singapore) https://t.co/K1av2dk7GI",
"geoLocation": {
"lat": 1.33378498,
"lon": 103.74183655
},
"user": {
"id": 252470398, ...
}
}
},
...
]
}
}
Geo Bounding Box Query
Retrieve tweets containing singapore published
inside Marina Bay area
{
“query”: {
“bool”: {
“must”: [
{“match”: { “text”: “singapore” }}
],
“filter”: [
{“geo_bounding_box”: {
“geoLocation”: {
“top_left”: [103.852311, 1.289884],
“bottom_right”: [103.860465, 1.279158]
}
}}
]
}
}
}
Accept GeoJSON
format!
{
"took": 8, "timed_out": false,
"_shards": {
"total": 42, "successful": 42, "failed": 0
},
"hits": {
"total": 5758, "max_score": 4.6547956,
"hits": [
{
"_index": "plr_sg_tweet_201602",
"_type": "tweet",
"_id": "696276978584801280",
"_score": 4.6547956,
"_source": {
...
"text": "In #Singapore",
"geoLocation": {
"lat": 1.28902587,
"lon": 103.85594832
},
"user": { ... },
...
}
},
...
]
}
}
Nested Object
Retrieve tweets that starts with fossasia hashtag
{
“query”: {
“nested”: {
“path”: “hashtagEntities”,
“query”: {
“bool”: {
“must”: [
{“match”: { “hashtagEntities.text”: “fossasia”}}
],
“filter“: [
{“range”: { “hashtagEntities.start”: { “lt”: 1
}}}
]
}
}
}
}
}
Nested Object
Retrieve tweets that starts with fossasia hashtag
{
“query”: {
“nested”: {
“path”: “hashtagEntities”,
“query”: {
“bool”: {
“must”: [
{“match”: { “hashtagEntities.text”: “fossasia”}}
],
“filter“: [
{“range”: { “hashtagEntities.start”: { “lt”: 1
}}}
]
}
}
}
}
}
{
"took": 6, "timed_out": false,
"_shards": {
"total": 42, "successful": 42, "failed": 0
},
"hits": {
"total": 3, "max_score": 16.199848,
"hits": [
{ "_score": 16.199848, ...
"_source": {
...
"hashtagEntities": [
{ "start": 0, "end": 9,
"text": "FOSSASIA" }
],
"text": "#FOSSASIA #GoogleCodeIn #GCI
speeding up. 150+ students currently working on
tasks! Great you are joining @hpdang
@mariobehling @mohitkanwal"
}
},
{ "_score": 15.867135, ...
"_source": {
...
"hashtagEntities": [
{ "start": 0, "end": 9,
"text": "FOSSASIA" },
],
"text": "#FOSSASIA 2016 is keen to
get more students to attend. Learn coding n
tech. Happy to share more details https://t.
co/1bRmvZVrOP #edsg"
}
}, { ... }
]
}
}
Aggregation & Analytics
Aggregation and Analytics
Types of aggregations (that we often use):
● Terms Aggregation:
○ Bucketing documents based on numeric/textual content
● Date Histogram Aggregation:
○ Bucketing documents based on date/time value
● Geo Distance Aggregation
○ Bucketing documents based on distance from an origin location
Combined Aggregations
Combined Aggregations & Queries
Terms Aggregation
“What are the popular platforms Twitter users use?”
Terms Aggregation
{
“aggs”: {
“mostPopularSource ”: {
“terms”: {
“field”: “source”,
“size”: 3
}
}
}
}
Constant keywords
Name of the
aggregation
Type of the
aggregation
The targeted
field to
perform
aggregation on
Limit the size
of the result
buckets
Terms Aggregation
{
“aggs”: {
“mostPopularSource ”: {
“terms”: {
“field”: “source”,
“size”: 3
}
}
}
}
{ ...
“aggregations ”: {
“mostPopularSource ”: {
“doc_count_error_upper_bound”: 87696 ,
“sum_other_doc_count”: 12907898 ,
“buckets”: [
{
“key”: “Twitter for iPhone” ,
“Doc_count”: 27928770
},
{
“key”: “Twitter for Android” ,
“Doc_count”: 21327691
},
{
“key”: “Twitter Web Client” ,
“Doc_count”: 6243422
}
}
}
}
Doc counts are
approximate (->
upper bound on
doc_count error for
each term)
The sum of doc
counts for
buckets not in
the response
Term: the bucket’
s keyword
The doc counts
for this bucket
Date Histogram Aggregation
“Number of tweets collected each month?”
Date Histogram Aggregation
{
“aggs”: {
“numberOfTweetsByMonth ”: {
“date_histogram ”: {
“field”: “ createdAt”,
“interval”: “ month”
}
}
}
}
Type of the
aggregation
The targeted
field to
perform
aggregation onDefine the
interval to
“bucket” the
count
Date Histogram Aggregation
{
“aggs”: {
“numberOfTweetsByMonth ”: {
“date_histogram ”: {
“field”: “ createdAt”,
“interval”: “ month”
}
}
}
}
{ ...
“aggregations”: {
“numberOfTweetsByMonth ”: {
“buckets”: [
{
“key_as_string”:
“Jan 1, 2016 12:0:0 AM” ,
“key”: 1451606400000
“doc_count”: 28067435
},
{
“key_as_string”:
“Feb 1, 2016 12:0:0 AM” ,
“key”: 1454284800000
“doc_count”: 25912385
},
{
“key_as_string”:
“Mar 1, 2016 12:0:0 AM” ,
“key”: 1456790400000
“doc_count”: 14427961
}, …}}}
We have 28
millions tweets
that was
tweeted
(createdAt) in
Jan 2016
Terms + Date Histogram Aggregation Combined
“What is the platform Twitter users use?”
“On each day”
Terms + Date Histogram Aggregation Combined
{
"aggs": {
"numberOfTweetsByDay ": {
"date_histogram ": {
"field": "createdAt",
"interval": "day"
},
"aggs": {
"mostPopularSource ": {
" terms": {
"field": "source"
}
}
}
}}}
Aggregation
Sub-Aggregation
Terms + Date Histogram Aggregation Combined
Twitter for iPhone
Twitter for Android
Twitter Web Client
dlvr.it
IFTTT
Twitter for iPad
TweetDeck
Geo Distance Aggregations
{
“aggs”: {
“numberOfTweetsByRadius ”: {
“geo_distance ”: {
“field”: “ geoLocation ”,
“origin”: “ 1.3,103.8”,
“unit”: “ km”,
“ranges”: [
{ “to”: 1 },
{ “from”: 1, “to”: 3},
{ “from”: 3 }
]
}
}
}
}
Type of the
aggregation
Define the
buckets
The radius’ unit
Distances are
computed from
this origin
The targeted
field
Geo Distance Aggregations
{
“aggs”: {
“numberOfTweetsByRadius ”: {
“geo_distance ”: {
“field”: “ geoLocation ”,
“origin”: “ 1.3,103.8”,
“unit”: “ km”,
“ranges”: [
{ “to”: 1 },
{ “from”: 1, “to”: 3},
{ “from”: 3 }
]
}
}
}
}
{ ...
“aggregations”: {
“numberOfTweetsByRadius ”: {
“buckets”: [
{
“key”: “*-1.0” ,
“from”: 0, “from_as_string”:“0.0”,
“to”: 1, “to_as_string”: “1.0”
“doc_count”: 1578
},
{
“key”: “1.0-3.0” ,
“from”: 1, “from_as_string”:“1.0”,
“to”: 3, “to_as_string”: “3.0”,
“doc_count”: 17880
},
{
“key”: “3.0-*” ,
“from”: 3, “from_as_string”:”3.0”
“doc_count”: 779613
}
]
}}}
Geo Distance Aggregations
17880
1578
779613
And many other types of aggregations
Refer to:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-
aggregations.html
in Beta
Lesson Learned
ES @ LARC: Lesson Learned
0.19.x -> 0.90.10 -> 1.7.0 -> 2.0.0
Read
Elasticsearch the Definitive Guide (online)
Start with Getting Started section!
{
“id”: 709260211836485600 ,
“createdAt”: “ Mar 14, 2016 2:09:46 PM ”,
“text”: “ @arinto Just few more days to
share #elasticsearch at
#FOSSASIA 2016 https://t.co/PtZk14CNXl ”,
“geoLocation”: {
“latitude”: 1.2971576,
“longitude”: 103.8495769
},
“favorites”: [{
“screenName”: “arinto”,
“origin”: “Indonesia”},
{
“screenName”: “casey”,
“origin”: “Vietnam”}]
}
}
Define the correct mapping
Elasticsearch dynamic mapping, OK for production?
string instead of date
No relation between fields!
Searching for
(screenName == arinto && origin == vietnam)
will return both data
double instead of geo_point
Define the correct mapping
{
“id”: 709260211836485600 ,
“createdAt”: “ Mar 14, 2016 2:09:46 PM ”,
“text”: “ @arinto Just few more days to
share #elasticsearch at
#FOSSASIA 2016 https://t.co/PtZk14CNXl ”,
“geoLocation”: {
“latitude”: 1.2971576,
“longitude”: 103.8495769
},
“favorites”: [{
“screenName”: “arinto”,
“origin”: “Indonesia”},
{
“screenName”: “casey”,
“origin”: “Vietnam”}]
}
}
{
//rest of the mapping
"id": {
"type": "long" },
"createdAt": {
"format": "MMM d, y h:m:s a",
"type": "date" },
"text": {
"type": "string" },
"geoLocation": {
"type": "geo_point" },
"favorites": {
"type": "nested"
"properties": {…}}
//..rest of the mapping
}
Elasticsearch dynamic mapping, not OK for production.
Define the correct mapping! Check the docs to learn more about mapping
[
…,
{'nancygoh': 'singapore'},
{'lulu': 'china'},
{'barbarella': 'australia'},
{'leticia': 'philippines'},
…,
]
Key: name Value: origin
KV store in Elasticsearch
Key-value store in Elasticsearch
● Field name as the key
● 10 or 100 keys are okay..
● What if you have million of keys?
● Does it scale?
KV store - Mapping Explosion!
● Dynamically add new fields in a mapping is an expensive operation
○ Lock the index, add new fields, and propagate index structure changes
● Halt the cluster!
KV store - Solution
Correct mapping:
{
"mydata": {
"mappings": {
"kv": {
"dynamic": "strict",
"properties": {
"key": {
"type": "string",
"index": "not_analyzed" },
"value": {
"type": "nested" ,
"properties": {.....} //detail hidden
}
}
}
}
}
}
Sample indexed data:
[{
"key": "nancygoh",
"value": { "origin": "singapore " }
}, {
"key": "lulu",
"value": { "origin": "china" }
}, {
"key": "barbarella",
"value": { "origin": "australia" }
}, {
"key": "leticiabongnino",
"value": { "origin": "philippines" }
}]
Keep the number of fields under control!
Shards
● No magic number
○ However.. you must determine when you
create the index
○ Estimate data growth
○ Prepare for reindex
kopf plugin
Index template & rolling index
Rolling(time-based)
index
Reconfigure
shards &
replicas
Index template
Pattern: plr_sg_tweet_*
Define the
correct mapping
Problematic shard
1 shard@122.23
GB
2 replicas
Not good!
Modify index template
Reconfigure
shards &
replicas
Index template
Pattern:
plr_sg_tweet_*
201603
14 shards
1 replica
Indexing performance
Tweet bulk-loading indexing performance
1 shard
2 replicas
1.8K/S
14 shards
1 replica
6.6K/S (more than 3X)
Alias
No change in application code:
Alias
201602 = latest
Alias Alias
201603 = latest
No change in application code:
Replicas
201601 data
1 replica
● You can change it on the fly
● Start with 1 for fault tolerance
● What happen when the read
request rate is very high?
Replicas
● Increase accordingly to
○ balance load
○ increasing the availability
○ scale up read requests
201601 data
6 replicas
Lesson Learned
● Read the book
● Define correct mapping
● Index template & rolling indices
● Use `alias`
● Scale up using replicas
Q&A
We’re Hiring!!!
bit.ly/larchiring
Elastic Training in Singapore:
● Core Elasticsearch: Operations 25 April 2016
● Core Elasticsearch: Developer 26-27 April 2016
training.elastic.co

More Related Content

What's hot

Elasticsearch Introduction
Elasticsearch IntroductionElasticsearch Introduction
Elasticsearch Introduction
Roopendra Vishwakarma
 
Elasticsearch in 15 minutes
Elasticsearch in 15 minutesElasticsearch in 15 minutes
Elasticsearch in 15 minutes
David Pilato
 
Introduction to Elasticsearch
Introduction to ElasticsearchIntroduction to Elasticsearch
Introduction to Elasticsearch
Sperasoft
 
ElasticSearch - index server used as a document database
ElasticSearch - index server used as a document databaseElasticSearch - index server used as a document database
ElasticSearch - index server used as a document database
Robert Lujo
 
Introduction to Elasticsearch
Introduction to ElasticsearchIntroduction to Elasticsearch
Introduction to Elasticsearch
Bo Andersen
 
Introduction to Elasticsearch with basics of Lucene
Introduction to Elasticsearch with basics of LuceneIntroduction to Elasticsearch with basics of Lucene
Introduction to Elasticsearch with basics of Lucene
Rahul Jain
 
ElasticSearch - DevNexus Atlanta - 2014
ElasticSearch - DevNexus Atlanta - 2014ElasticSearch - DevNexus Atlanta - 2014
ElasticSearch - DevNexus Atlanta - 2014
Roy Russo
 
Elasticsearch - DevNexus 2015
Elasticsearch - DevNexus 2015Elasticsearch - DevNexus 2015
Elasticsearch - DevNexus 2015
Roy Russo
 
Elastic search apache_solr
Elastic search apache_solrElastic search apache_solr
Elastic search apache_solrmacrochen
 
Roaring with elastic search sangam2018
Roaring with elastic search sangam2018Roaring with elastic search sangam2018
Roaring with elastic search sangam2018
Vinay Kumar
 
What I learnt: Elastic search & Kibana : introduction, installtion & configur...
What I learnt: Elastic search & Kibana : introduction, installtion & configur...What I learnt: Elastic search & Kibana : introduction, installtion & configur...
What I learnt: Elastic search & Kibana : introduction, installtion & configur...
Rahul K Chauhan
 
Introduction to Elasticsearch
Introduction to ElasticsearchIntroduction to Elasticsearch
Introduction to Elasticsearch
Ruslan Zavacky
 
Intro to Elasticsearch
Intro to ElasticsearchIntro to Elasticsearch
Intro to Elasticsearch
Clifford James
 
Cool bonsai cool - an introduction to ElasticSearch
Cool bonsai cool - an introduction to ElasticSearchCool bonsai cool - an introduction to ElasticSearch
Cool bonsai cool - an introduction to ElasticSearch
clintongormley
 
Philly PHP: April '17 Elastic Search Introduction by Aditya Bhamidpati
Philly PHP: April '17 Elastic Search Introduction by Aditya BhamidpatiPhilly PHP: April '17 Elastic Search Introduction by Aditya Bhamidpati
Philly PHP: April '17 Elastic Search Introduction by Aditya Bhamidpati
Robert Calcavecchia
 
Elastic Search
Elastic SearchElastic Search
Elastic Search
Navule Rao
 
Elasticsearch Basics
Elasticsearch BasicsElasticsearch Basics
Elasticsearch Basics
Shifa Khan
 
Simple search with elastic search
Simple search with elastic searchSimple search with elastic search
Simple search with elastic search
markstory
 

What's hot (18)

Elasticsearch Introduction
Elasticsearch IntroductionElasticsearch Introduction
Elasticsearch Introduction
 
Elasticsearch in 15 minutes
Elasticsearch in 15 minutesElasticsearch in 15 minutes
Elasticsearch in 15 minutes
 
Introduction to Elasticsearch
Introduction to ElasticsearchIntroduction to Elasticsearch
Introduction to Elasticsearch
 
ElasticSearch - index server used as a document database
ElasticSearch - index server used as a document databaseElasticSearch - index server used as a document database
ElasticSearch - index server used as a document database
 
Introduction to Elasticsearch
Introduction to ElasticsearchIntroduction to Elasticsearch
Introduction to Elasticsearch
 
Introduction to Elasticsearch with basics of Lucene
Introduction to Elasticsearch with basics of LuceneIntroduction to Elasticsearch with basics of Lucene
Introduction to Elasticsearch with basics of Lucene
 
ElasticSearch - DevNexus Atlanta - 2014
ElasticSearch - DevNexus Atlanta - 2014ElasticSearch - DevNexus Atlanta - 2014
ElasticSearch - DevNexus Atlanta - 2014
 
Elasticsearch - DevNexus 2015
Elasticsearch - DevNexus 2015Elasticsearch - DevNexus 2015
Elasticsearch - DevNexus 2015
 
Elastic search apache_solr
Elastic search apache_solrElastic search apache_solr
Elastic search apache_solr
 
Roaring with elastic search sangam2018
Roaring with elastic search sangam2018Roaring with elastic search sangam2018
Roaring with elastic search sangam2018
 
What I learnt: Elastic search & Kibana : introduction, installtion & configur...
What I learnt: Elastic search & Kibana : introduction, installtion & configur...What I learnt: Elastic search & Kibana : introduction, installtion & configur...
What I learnt: Elastic search & Kibana : introduction, installtion & configur...
 
Introduction to Elasticsearch
Introduction to ElasticsearchIntroduction to Elasticsearch
Introduction to Elasticsearch
 
Intro to Elasticsearch
Intro to ElasticsearchIntro to Elasticsearch
Intro to Elasticsearch
 
Cool bonsai cool - an introduction to ElasticSearch
Cool bonsai cool - an introduction to ElasticSearchCool bonsai cool - an introduction to ElasticSearch
Cool bonsai cool - an introduction to ElasticSearch
 
Philly PHP: April '17 Elastic Search Introduction by Aditya Bhamidpati
Philly PHP: April '17 Elastic Search Introduction by Aditya BhamidpatiPhilly PHP: April '17 Elastic Search Introduction by Aditya Bhamidpati
Philly PHP: April '17 Elastic Search Introduction by Aditya Bhamidpati
 
Elastic Search
Elastic SearchElastic Search
Elastic Search
 
Elasticsearch Basics
Elasticsearch BasicsElasticsearch Basics
Elasticsearch Basics
 
Simple search with elastic search
Simple search with elastic searchSimple search with elastic search
Simple search with elastic search
 

Viewers also liked

Elasticsearchと機械学習を実際に連携させる
Elasticsearchと機械学習を実際に連携させるElasticsearchと機械学習を実際に連携させる
Elasticsearchと機械学習を実際に連携させる
nobu_k
 
Fluentdによる研究開発用DCのデータ収集
Fluentdによる研究開発用DCのデータ収集Fluentdによる研究開発用DCのデータ収集
Fluentdによる研究開発用DCのデータ収集
Sugimoto Hiroshi
 
Unsupervised Learning with Apache Spark
Unsupervised Learning with Apache SparkUnsupervised Learning with Apache Spark
Unsupervised Learning with Apache Spark
DB Tsai
 
Deans-textbook-alternatives
Deans-textbook-alternativesDeans-textbook-alternatives
Deans-textbook-alternatives
Bruce Gilbert
 
PROEXPOSURE: pushing female perspectives
PROEXPOSURE: pushing female perspectivesPROEXPOSURE: pushing female perspectives
PROEXPOSURE: pushing female perspectivesPROEXPOSURE CIC
 
CiviCRM bij Cavaria
CiviCRM bij CavariaCiviCRM bij Cavaria
Новые стандарты по делопроизводству (международная практика).
Новые стандарты по делопроизводству (международная практика).Новые стандарты по делопроизводству (международная практика).
Новые стандарты по делопроизводству (международная практика).
Natasha Khramtsovsky
 
How Scary Is It
How Scary Is ItHow Scary Is It
How Scary Is Itramlal1974
 
д-р Лючиана Дюранти – Расширенная версия презентации на английском языке к се...
д-р Лючиана Дюранти – Расширенная версия презентации на английском языке к се...д-р Лючиана Дюранти – Расширенная версия презентации на английском языке к се...
д-р Лючиана Дюранти – Расширенная версия презентации на английском языке к се...
Natasha Khramtsovsky
 
Gruppo Sanniti: Individuazione di obiettivi trasversali per classi del trienn...
Gruppo Sanniti: Individuazione di obiettivi trasversali per classi del trienn...Gruppo Sanniti: Individuazione di obiettivi trasversali per classi del trienn...
Gruppo Sanniti: Individuazione di obiettivi trasversali per classi del trienn...
Angela Iaciofano
 
Kennisdelen in het Steunpunt Expertisenetwerken
Kennisdelen in het Steunpunt ExpertisenetwerkenKennisdelen in het Steunpunt Expertisenetwerken
Kennisdelen in het Steunpunt Expertisenetwerken
Socius - steunpunt sociaal-cultureel werk
 
PROEXPOSURE photos: Football
PROEXPOSURE photos: FootballPROEXPOSURE photos: Football
PROEXPOSURE photos: FootballPROEXPOSURE CIC
 
Jeopardy
JeopardyJeopardy
Jeopardy
guest806b67
 
Perpetual Beta Final
Perpetual Beta FinalPerpetual Beta Final
Perpetual Beta Final
Marcus Banks
 
Saturday.presentation 2
Saturday.presentation 2Saturday.presentation 2
Saturday.presentation 2
metrolindsay
 
หนึ่ง สอง Automate
หนึ่ง สอง Automateหนึ่ง สอง Automate
หนึ่ง สอง Automate
Somkiat Puisungnoen
 
Gedeelde waarde creëren samen met je stakeholders
Gedeelde waarde creëren samen met je stakeholdersGedeelde waarde creëren samen met je stakeholders
Gedeelde waarde creëren samen met je stakeholders
Socius - steunpunt sociaal-cultureel werk
 

Viewers also liked (20)

Elasticsearchと機械学習を実際に連携させる
Elasticsearchと機械学習を実際に連携させるElasticsearchと機械学習を実際に連携させる
Elasticsearchと機械学習を実際に連携させる
 
Fluentdによる研究開発用DCのデータ収集
Fluentdによる研究開発用DCのデータ収集Fluentdによる研究開発用DCのデータ収集
Fluentdによる研究開発用DCのデータ収集
 
Unsupervised Learning with Apache Spark
Unsupervised Learning with Apache SparkUnsupervised Learning with Apache Spark
Unsupervised Learning with Apache Spark
 
Malowaneciala
MalowanecialaMalowaneciala
Malowaneciala
 
Deans-textbook-alternatives
Deans-textbook-alternativesDeans-textbook-alternatives
Deans-textbook-alternatives
 
PROEXPOSURE: pushing female perspectives
PROEXPOSURE: pushing female perspectivesPROEXPOSURE: pushing female perspectives
PROEXPOSURE: pushing female perspectives
 
CiviCRM bij Cavaria
CiviCRM bij CavariaCiviCRM bij Cavaria
CiviCRM bij Cavaria
 
Новые стандарты по делопроизводству (международная практика).
Новые стандарты по делопроизводству (международная практика).Новые стандарты по делопроизводству (международная практика).
Новые стандарты по делопроизводству (международная практика).
 
How Scary Is It
How Scary Is ItHow Scary Is It
How Scary Is It
 
д-р Лючиана Дюранти – Расширенная версия презентации на английском языке к се...
д-р Лючиана Дюранти – Расширенная версия презентации на английском языке к се...д-р Лючиана Дюранти – Расширенная версия презентации на английском языке к се...
д-р Лючиана Дюранти – Расширенная версия презентации на английском языке к се...
 
Happyshop
HappyshopHappyshop
Happyshop
 
Gruppo Sanniti: Individuazione di obiettivi trasversali per classi del trienn...
Gruppo Sanniti: Individuazione di obiettivi trasversali per classi del trienn...Gruppo Sanniti: Individuazione di obiettivi trasversali per classi del trienn...
Gruppo Sanniti: Individuazione di obiettivi trasversali per classi del trienn...
 
Kennisdelen in het Steunpunt Expertisenetwerken
Kennisdelen in het Steunpunt ExpertisenetwerkenKennisdelen in het Steunpunt Expertisenetwerken
Kennisdelen in het Steunpunt Expertisenetwerken
 
PROEXPOSURE photos: Football
PROEXPOSURE photos: FootballPROEXPOSURE photos: Football
PROEXPOSURE photos: Football
 
Jeopardy
JeopardyJeopardy
Jeopardy
 
Perpetual Beta Final
Perpetual Beta FinalPerpetual Beta Final
Perpetual Beta Final
 
Saturday.presentation 2
Saturday.presentation 2Saturday.presentation 2
Saturday.presentation 2
 
หนึ่ง สอง Automate
หนึ่ง สอง Automateหนึ่ง สอง Automate
หนึ่ง สอง Automate
 
Gedeelde waarde creëren samen met je stakeholders
Gedeelde waarde creëren samen met je stakeholdersGedeelde waarde creëren samen met je stakeholders
Gedeelde waarde creëren samen met je stakeholders
 
Sociale media voor non-profitorganisaties
Sociale media voor non-profitorganisatiesSociale media voor non-profitorganisaties
Sociale media voor non-profitorganisaties
 

Similar to Elasticsearch: You know, for search! and more!

Peggy elasticsearch應用
Peggy elasticsearch應用Peggy elasticsearch應用
Peggy elasticsearch應用
LearningTech
 
Extensible RESTful Applications with Apache TinkerPop
Extensible RESTful Applications with Apache TinkerPopExtensible RESTful Applications with Apache TinkerPop
Extensible RESTful Applications with Apache TinkerPop
Varun Ganesh
 
Scaling Analytics with elasticsearch
Scaling Analytics with elasticsearchScaling Analytics with elasticsearch
Scaling Analytics with elasticsearchdnoble00
 
Elasticsearch first-steps
Elasticsearch first-stepsElasticsearch first-steps
Elasticsearch first-steps
Matteo Moci
 
Finding the right stuff, an intro to Elasticsearch with Ruby/Rails
Finding the right stuff, an intro to Elasticsearch with Ruby/RailsFinding the right stuff, an intro to Elasticsearch with Ruby/Rails
Finding the right stuff, an intro to Elasticsearch with Ruby/Rails
Michael Reinsch
 
Montreal Elasticsearch Meetup
Montreal Elasticsearch MeetupMontreal Elasticsearch Meetup
Montreal Elasticsearch Meetup
Loïc Bertron
 
Closing the Loop in Extended Reality with Kafka Streams and Machine Learning ...
Closing the Loop in Extended Reality with Kafka Streams and Machine Learning ...Closing the Loop in Extended Reality with Kafka Streams and Machine Learning ...
Closing the Loop in Extended Reality with Kafka Streams and Machine Learning ...
confluent
 
Elasticsearch War Stories
Elasticsearch War StoriesElasticsearch War Stories
Elasticsearch War Stories
Arno Broekhof
 
Elastic Search
Elastic SearchElastic Search
Elastic Search
NexThoughts Technologies
 
Anwendungsfaelle für Elasticsearch
Anwendungsfaelle für ElasticsearchAnwendungsfaelle für Elasticsearch
Anwendungsfaelle für Elasticsearch
Florian Hopf
 
elasticsearch - advanced features in practice
elasticsearch - advanced features in practiceelasticsearch - advanced features in practice
elasticsearch - advanced features in practice
Jano Suchal
 
d3sparql.js demo at SWAT4LS 2014 in Berlin
d3sparql.js demo at SWAT4LS 2014 in Berlind3sparql.js demo at SWAT4LS 2014 in Berlin
d3sparql.js demo at SWAT4LS 2014 in Berlin
Toshiaki Katayama
 
Real-time search in Drupal with Elasticsearch @Moldcamp
Real-time search in Drupal with Elasticsearch @MoldcampReal-time search in Drupal with Elasticsearch @Moldcamp
Real-time search in Drupal with Elasticsearch @MoldcampAlexei Gorobets
 
Liferay Search: Best Practices to Dramatically Improve Relevance - Liferay Sy...
Liferay Search: Best Practices to Dramatically Improve Relevance - Liferay Sy...Liferay Search: Best Practices to Dramatically Improve Relevance - Liferay Sy...
Liferay Search: Best Practices to Dramatically Improve Relevance - Liferay Sy...
André Ricardo Barreto de Oliveira
 
Harnessing The Power of Search - Liferay DEVCON 2015, Darmstadt, Germany
Harnessing The Power of Search - Liferay DEVCON 2015, Darmstadt, GermanyHarnessing The Power of Search - Liferay DEVCON 2015, Darmstadt, Germany
Harnessing The Power of Search - Liferay DEVCON 2015, Darmstadt, Germany
André Ricardo Barreto de Oliveira
 
GraphQL Los Angeles Meetup Slides
GraphQL Los Angeles Meetup SlidesGraphQL Los Angeles Meetup Slides
GraphQL Los Angeles Meetup Slides
Grant Miller
 
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
South Tyrol Free Software Conference
 
Elasticsearch & "PeopleSearch"
Elasticsearch & "PeopleSearch"Elasticsearch & "PeopleSearch"
Elasticsearch & "PeopleSearch"
George Stathis
 
Introduction to elasticsearch
Introduction to elasticsearchIntroduction to elasticsearch
Introduction to elasticsearch
Florian Hopf
 
Elasticsearch in 15 Minutes
Elasticsearch in 15 MinutesElasticsearch in 15 Minutes
Elasticsearch in 15 Minutes
Karel Minarik
 

Similar to Elasticsearch: You know, for search! and more! (20)

Peggy elasticsearch應用
Peggy elasticsearch應用Peggy elasticsearch應用
Peggy elasticsearch應用
 
Extensible RESTful Applications with Apache TinkerPop
Extensible RESTful Applications with Apache TinkerPopExtensible RESTful Applications with Apache TinkerPop
Extensible RESTful Applications with Apache TinkerPop
 
Scaling Analytics with elasticsearch
Scaling Analytics with elasticsearchScaling Analytics with elasticsearch
Scaling Analytics with elasticsearch
 
Elasticsearch first-steps
Elasticsearch first-stepsElasticsearch first-steps
Elasticsearch first-steps
 
Finding the right stuff, an intro to Elasticsearch with Ruby/Rails
Finding the right stuff, an intro to Elasticsearch with Ruby/RailsFinding the right stuff, an intro to Elasticsearch with Ruby/Rails
Finding the right stuff, an intro to Elasticsearch with Ruby/Rails
 
Montreal Elasticsearch Meetup
Montreal Elasticsearch MeetupMontreal Elasticsearch Meetup
Montreal Elasticsearch Meetup
 
Closing the Loop in Extended Reality with Kafka Streams and Machine Learning ...
Closing the Loop in Extended Reality with Kafka Streams and Machine Learning ...Closing the Loop in Extended Reality with Kafka Streams and Machine Learning ...
Closing the Loop in Extended Reality with Kafka Streams and Machine Learning ...
 
Elasticsearch War Stories
Elasticsearch War StoriesElasticsearch War Stories
Elasticsearch War Stories
 
Elastic Search
Elastic SearchElastic Search
Elastic Search
 
Anwendungsfaelle für Elasticsearch
Anwendungsfaelle für ElasticsearchAnwendungsfaelle für Elasticsearch
Anwendungsfaelle für Elasticsearch
 
elasticsearch - advanced features in practice
elasticsearch - advanced features in practiceelasticsearch - advanced features in practice
elasticsearch - advanced features in practice
 
d3sparql.js demo at SWAT4LS 2014 in Berlin
d3sparql.js demo at SWAT4LS 2014 in Berlind3sparql.js demo at SWAT4LS 2014 in Berlin
d3sparql.js demo at SWAT4LS 2014 in Berlin
 
Real-time search in Drupal with Elasticsearch @Moldcamp
Real-time search in Drupal with Elasticsearch @MoldcampReal-time search in Drupal with Elasticsearch @Moldcamp
Real-time search in Drupal with Elasticsearch @Moldcamp
 
Liferay Search: Best Practices to Dramatically Improve Relevance - Liferay Sy...
Liferay Search: Best Practices to Dramatically Improve Relevance - Liferay Sy...Liferay Search: Best Practices to Dramatically Improve Relevance - Liferay Sy...
Liferay Search: Best Practices to Dramatically Improve Relevance - Liferay Sy...
 
Harnessing The Power of Search - Liferay DEVCON 2015, Darmstadt, Germany
Harnessing The Power of Search - Liferay DEVCON 2015, Darmstadt, GermanyHarnessing The Power of Search - Liferay DEVCON 2015, Darmstadt, Germany
Harnessing The Power of Search - Liferay DEVCON 2015, Darmstadt, Germany
 
GraphQL Los Angeles Meetup Slides
GraphQL Los Angeles Meetup SlidesGraphQL Los Angeles Meetup Slides
GraphQL Los Angeles Meetup Slides
 
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
SFScon17 - Patrick Puecher: "Exploring data with Elasticsearch and Kibana"
 
Elasticsearch & "PeopleSearch"
Elasticsearch & "PeopleSearch"Elasticsearch & "PeopleSearch"
Elasticsearch & "PeopleSearch"
 
Introduction to elasticsearch
Introduction to elasticsearchIntroduction to elasticsearch
Introduction to elasticsearch
 
Elasticsearch in 15 Minutes
Elasticsearch in 15 MinutesElasticsearch in 15 Minutes
Elasticsearch in 15 Minutes
 

Recently uploaded

TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
Tier1 app
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
Tendenci - The Open Source AMS (Association Management Software)
 
Visitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.appVisitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.app
NaapbooksPrivateLimi
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
kalichargn70th171
 
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
XfilesPro
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
Ortus Solutions, Corp
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Globus
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
WSO2
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
Globus
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Anthony Dahanne
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
KrzysztofKkol1
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
IES VE
 
Advanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowAdvanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should Know
Peter Caitens
 

Recently uploaded (20)

TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 
Visitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.appVisitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.app
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
 
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
 
BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024BoxLang: Review our Visionary Licenses of 2024
BoxLang: Review our Visionary Licenses of 2024
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
Advanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowAdvanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should Know
 

Elasticsearch: You know, for search! and more!

  • 1. Elasticsearch, You Know For Search! And More! Medcl,曾勇(Zeng Yong) Philips Kokoh Prasetyo Casey Vu Arinto Murdopo
  • 2.
  • 3. Outline ● Real time Search (Philips) ● Aggregation & Analytics (Casey) ● Lesson Learned @LARC (Arinto)
  • 5. Real-time Search ● Indexing ○ Mapping ■ How a document, and the fields it contains are stored and indexed ● Simple type: string, date, long, double, boolean, ip ● Hierarchical: object, nested object ● Specialized type: geo_point, geo_shape, completion ○ Analysis ■ How full text is processed to make it searchable ● Standard Analyzer, Simple Analyzer, Language Analyzer, Snowball Analyzer ● Searching ○ Query DSL ■ Flexible and powerful query language used by Elasticsearch
  • 6. { “id”: 709260211836485600 , “createdAt”: “ Mar 14, 2016 2:09:46 PM ”, “text”: “ @arinto Just few more days to share #elasticsearch at #FOSSASIA 2016 https://t.co/PtZk14CNXl ”, “user”: { “screenName”: “philipskokoh”, “name”: “Philips Kokoh”, ... }, “hashtagEntities”: [ { “start”: 36, “end”: 50, “text”: “elasticsearch” }, { “start”: 54, “end”: 63, “text”: “FOSSASIA” } ], “geoLocation”: { “latitude”: 1.2971576, “longitude”: 103.8495769 }, ... } Mapping Long Date Analyzed String Nested Object Geo_point Object
  • 7. Analysis ● Standard Analyzer ○ [set, the, shape, to, semi, transparent, by, calling, set_trans, 5] ● Simple Analyzer ○ [set, the, shape, to, semi, transparent, by, calling, set, trans] ● Whitespace Analyzer ○ [Set, the, shape, to, semi-transparent, by, calling, set_trans(5)] ● Language Analyzer, e.g. english, french, spanish, arabic, … ○ English analyzer: [set, shape, semi, transpar, call, set_tran, 5] A quick brown fox jumps over the lazy dog. Grumpy wizards make toxic brew for the evil queen and jack. How razorback-jumping frogs can level six piqued gymnasts! Index Character Filters Tokenizer Token Filters Analyzer “Set the shape to semi-transparent by calling set_trans(5)”Built-in Analyzer
  • 8. Searching Query DSL ● Based on JSON to define queries :) ● Behavior: ○ Query Context ■ Answering: “How well this document match this query clause?” ■ Return: _score → relevance score ○ Filter Context ■ Answering: “Does this document match this query clause?” ■ Return: boolean yes or no
  • 9. Let’s Search!! Retrieve tweet containing “elasticsearch” or “fossasia” published before today by philipskokoh without geoLocation { “query”: { “bool”: { “must”: [ {“match”: { “text”: “elasticsearch fossasia” }} ], “filter“: [ {“term”: { “user.screenName”: “philipskokoh” }}, {“range”: { “createdAt”: {“lt”: “now/d” }}} ], “must_not”: [ {“exists”: { “field”: “geoLocation” }} ] } } }
  • 10. Let’s Search!! Retrieve tweet containing “elasticsearch” or “fossasia” published before today by philipskokoh without geoLocation { “query”: { “bool”: { “must”: [ {“match”: { “text”: “elasticsearch fossasia” }} ], “filter“: [ {“term”: { “user.screenName”: “philipskokoh” }}, {“range”: { “createdAt”: {“lt”: “now/d” }}} ], “must_not”: [ {“exists”: { “field”: “geoLocation” }} ] } } } { "took": 22, "timed_out": false, "_shards": { "total": 42, "successful": 42, "failed": 0 }, "hits": { "total": 1, "max_score": 4.0619926, "hits": [ { "_index": "plr_sg_tweet_201603", "_type": "tweet", "_id": "707403325390520320", "_score": 4.0619926, "_source": { ... "createdAt": "Mar 9, 2016 11:11:10 AM", "id": 707403325390520300, "text": "I will be giving a workshop at #FOSSASIA 2016 titled: Elasticsearch: You know, for search! and more! https://t.co/FRCQlQdHhHnCome, join us! ", "user": { ... "screenName": "philipskokoh", "lang": "en", "name": "Philips Kokoh", }, "retweetCount": 2, } } ] } }
  • 11. Geo Distance Range Query Retrieve tweets containing fossasia published before today within 2km from Science Centre { “query”: { “bool”: { “must”: [ {“match”: { “text”: “mrt” }} ], “filter”: [ {“range”: { “createdAt”: {“lt”: “now/d” }}}, {“geo_distance_range”: { “gt”: “0km”, “lt”: “1km”, “geoLocation”: { “lat”: 1.332906, “lon”: 103.736110 } }} ] } } }
  • 12. Geo Distance Range Query Retrieve tweets containing fossasia published before today within 2km from Science Centre { “query”: { “bool”: { “must”: [ {“match”: { “text”: “mrt” }} ], “filter”: [ {“range”: { “createdAt”: {“lt”: “now/d” }}}, {“geo_distance_range”: { “gt”: “0km”, “lt”: “1km”, “geoLocation”: { “lat”: 1.332906, “lon”: 103.736110 } }} ] } } } { "took": 50, "timed_out": false, "_shards": { "total": 42, "successful": 42, "failed": 0 }, "hits": { "total": 974, "max_score": 3.6536937, "hits": [ { ... }, { "_index": "plr_sg_tweet_201602", "_type": "tweet", "_id": "700461563812192256", "_score": 3.646007, "_source": { ... "createdAt": "Feb 19, 2016 7:27:05 AM", "id": 700461563812192300, "text": "Mrt slow dao (@ Jurong East MRT Interchange (NS1/EW24) - @smrt_singapore in Singapore) https://t.co/K1av2dk7GI", "geoLocation": { "lat": 1.33378498, "lon": 103.74183655 }, "user": { "id": 252470398, ... } } }, ... ] } }
  • 13. Geo Bounding Box Query Retrieve tweets containing singapore published inside Marina Bay area { “query”: { “bool”: { “must”: [ {“match”: { “text”: “singapore” }} ], “filter”: [ {“geo_bounding_box”: { “geoLocation”: { “top_left”: [103.852311, 1.289884], “bottom_right”: [103.860465, 1.279158] } }} ] } } } Accept GeoJSON format! { "took": 8, "timed_out": false, "_shards": { "total": 42, "successful": 42, "failed": 0 }, "hits": { "total": 5758, "max_score": 4.6547956, "hits": [ { "_index": "plr_sg_tweet_201602", "_type": "tweet", "_id": "696276978584801280", "_score": 4.6547956, "_source": { ... "text": "In #Singapore", "geoLocation": { "lat": 1.28902587, "lon": 103.85594832 }, "user": { ... }, ... } }, ... ] } }
  • 14. Nested Object Retrieve tweets that starts with fossasia hashtag { “query”: { “nested”: { “path”: “hashtagEntities”, “query”: { “bool”: { “must”: [ {“match”: { “hashtagEntities.text”: “fossasia”}} ], “filter“: [ {“range”: { “hashtagEntities.start”: { “lt”: 1 }}} ] } } } } }
  • 15. Nested Object Retrieve tweets that starts with fossasia hashtag { “query”: { “nested”: { “path”: “hashtagEntities”, “query”: { “bool”: { “must”: [ {“match”: { “hashtagEntities.text”: “fossasia”}} ], “filter“: [ {“range”: { “hashtagEntities.start”: { “lt”: 1 }}} ] } } } } } { "took": 6, "timed_out": false, "_shards": { "total": 42, "successful": 42, "failed": 0 }, "hits": { "total": 3, "max_score": 16.199848, "hits": [ { "_score": 16.199848, ... "_source": { ... "hashtagEntities": [ { "start": 0, "end": 9, "text": "FOSSASIA" } ], "text": "#FOSSASIA #GoogleCodeIn #GCI speeding up. 150+ students currently working on tasks! Great you are joining @hpdang @mariobehling @mohitkanwal" } }, { "_score": 15.867135, ... "_source": { ... "hashtagEntities": [ { "start": 0, "end": 9, "text": "FOSSASIA" }, ], "text": "#FOSSASIA 2016 is keen to get more students to attend. Learn coding n tech. Happy to share more details https://t. co/1bRmvZVrOP #edsg" } }, { ... } ] } }
  • 17. Aggregation and Analytics Types of aggregations (that we often use): ● Terms Aggregation: ○ Bucketing documents based on numeric/textual content ● Date Histogram Aggregation: ○ Bucketing documents based on date/time value ● Geo Distance Aggregation ○ Bucketing documents based on distance from an origin location Combined Aggregations Combined Aggregations & Queries
  • 18. Terms Aggregation “What are the popular platforms Twitter users use?”
  • 19. Terms Aggregation { “aggs”: { “mostPopularSource ”: { “terms”: { “field”: “source”, “size”: 3 } } } } Constant keywords Name of the aggregation Type of the aggregation The targeted field to perform aggregation on Limit the size of the result buckets
  • 20. Terms Aggregation { “aggs”: { “mostPopularSource ”: { “terms”: { “field”: “source”, “size”: 3 } } } } { ... “aggregations ”: { “mostPopularSource ”: { “doc_count_error_upper_bound”: 87696 , “sum_other_doc_count”: 12907898 , “buckets”: [ { “key”: “Twitter for iPhone” , “Doc_count”: 27928770 }, { “key”: “Twitter for Android” , “Doc_count”: 21327691 }, { “key”: “Twitter Web Client” , “Doc_count”: 6243422 } } } } Doc counts are approximate (-> upper bound on doc_count error for each term) The sum of doc counts for buckets not in the response Term: the bucket’ s keyword The doc counts for this bucket
  • 21. Date Histogram Aggregation “Number of tweets collected each month?”
  • 22. Date Histogram Aggregation { “aggs”: { “numberOfTweetsByMonth ”: { “date_histogram ”: { “field”: “ createdAt”, “interval”: “ month” } } } } Type of the aggregation The targeted field to perform aggregation onDefine the interval to “bucket” the count
  • 23. Date Histogram Aggregation { “aggs”: { “numberOfTweetsByMonth ”: { “date_histogram ”: { “field”: “ createdAt”, “interval”: “ month” } } } } { ... “aggregations”: { “numberOfTweetsByMonth ”: { “buckets”: [ { “key_as_string”: “Jan 1, 2016 12:0:0 AM” , “key”: 1451606400000 “doc_count”: 28067435 }, { “key_as_string”: “Feb 1, 2016 12:0:0 AM” , “key”: 1454284800000 “doc_count”: 25912385 }, { “key_as_string”: “Mar 1, 2016 12:0:0 AM” , “key”: 1456790400000 “doc_count”: 14427961 }, …}}} We have 28 millions tweets that was tweeted (createdAt) in Jan 2016
  • 24. Terms + Date Histogram Aggregation Combined “What is the platform Twitter users use?” “On each day”
  • 25. Terms + Date Histogram Aggregation Combined { "aggs": { "numberOfTweetsByDay ": { "date_histogram ": { "field": "createdAt", "interval": "day" }, "aggs": { "mostPopularSource ": { " terms": { "field": "source" } } } }}} Aggregation Sub-Aggregation
  • 26. Terms + Date Histogram Aggregation Combined Twitter for iPhone Twitter for Android Twitter Web Client dlvr.it IFTTT Twitter for iPad TweetDeck
  • 27. Geo Distance Aggregations { “aggs”: { “numberOfTweetsByRadius ”: { “geo_distance ”: { “field”: “ geoLocation ”, “origin”: “ 1.3,103.8”, “unit”: “ km”, “ranges”: [ { “to”: 1 }, { “from”: 1, “to”: 3}, { “from”: 3 } ] } } } } Type of the aggregation Define the buckets The radius’ unit Distances are computed from this origin The targeted field
  • 28. Geo Distance Aggregations { “aggs”: { “numberOfTweetsByRadius ”: { “geo_distance ”: { “field”: “ geoLocation ”, “origin”: “ 1.3,103.8”, “unit”: “ km”, “ranges”: [ { “to”: 1 }, { “from”: 1, “to”: 3}, { “from”: 3 } ] } } } } { ... “aggregations”: { “numberOfTweetsByRadius ”: { “buckets”: [ { “key”: “*-1.0” , “from”: 0, “from_as_string”:“0.0”, “to”: 1, “to_as_string”: “1.0” “doc_count”: 1578 }, { “key”: “1.0-3.0” , “from”: 1, “from_as_string”:“1.0”, “to”: 3, “to_as_string”: “3.0”, “doc_count”: 17880 }, { “key”: “3.0-*” , “from”: 3, “from_as_string”:”3.0” “doc_count”: 779613 } ] }}}
  • 30. And many other types of aggregations Refer to: https://www.elastic.co/guide/en/elasticsearch/reference/current/search- aggregations.html
  • 33. ES @ LARC: Lesson Learned 0.19.x -> 0.90.10 -> 1.7.0 -> 2.0.0
  • 35. Start with Getting Started section!
  • 36. { “id”: 709260211836485600 , “createdAt”: “ Mar 14, 2016 2:09:46 PM ”, “text”: “ @arinto Just few more days to share #elasticsearch at #FOSSASIA 2016 https://t.co/PtZk14CNXl ”, “geoLocation”: { “latitude”: 1.2971576, “longitude”: 103.8495769 }, “favorites”: [{ “screenName”: “arinto”, “origin”: “Indonesia”}, { “screenName”: “casey”, “origin”: “Vietnam”}] } } Define the correct mapping Elasticsearch dynamic mapping, OK for production? string instead of date No relation between fields! Searching for (screenName == arinto && origin == vietnam) will return both data double instead of geo_point
  • 37. Define the correct mapping { “id”: 709260211836485600 , “createdAt”: “ Mar 14, 2016 2:09:46 PM ”, “text”: “ @arinto Just few more days to share #elasticsearch at #FOSSASIA 2016 https://t.co/PtZk14CNXl ”, “geoLocation”: { “latitude”: 1.2971576, “longitude”: 103.8495769 }, “favorites”: [{ “screenName”: “arinto”, “origin”: “Indonesia”}, { “screenName”: “casey”, “origin”: “Vietnam”}] } } { //rest of the mapping "id": { "type": "long" }, "createdAt": { "format": "MMM d, y h:m:s a", "type": "date" }, "text": { "type": "string" }, "geoLocation": { "type": "geo_point" }, "favorites": { "type": "nested" "properties": {…}} //..rest of the mapping } Elasticsearch dynamic mapping, not OK for production. Define the correct mapping! Check the docs to learn more about mapping
  • 38. [ …, {'nancygoh': 'singapore'}, {'lulu': 'china'}, {'barbarella': 'australia'}, {'leticia': 'philippines'}, …, ] Key: name Value: origin KV store in Elasticsearch Key-value store in Elasticsearch ● Field name as the key ● 10 or 100 keys are okay.. ● What if you have million of keys? ● Does it scale?
  • 39. KV store - Mapping Explosion! ● Dynamically add new fields in a mapping is an expensive operation ○ Lock the index, add new fields, and propagate index structure changes ● Halt the cluster!
  • 40. KV store - Solution Correct mapping: { "mydata": { "mappings": { "kv": { "dynamic": "strict", "properties": { "key": { "type": "string", "index": "not_analyzed" }, "value": { "type": "nested" , "properties": {.....} //detail hidden } } } } } } Sample indexed data: [{ "key": "nancygoh", "value": { "origin": "singapore " } }, { "key": "lulu", "value": { "origin": "china" } }, { "key": "barbarella", "value": { "origin": "australia" } }, { "key": "leticiabongnino", "value": { "origin": "philippines" } }] Keep the number of fields under control!
  • 41. Shards ● No magic number ○ However.. you must determine when you create the index ○ Estimate data growth ○ Prepare for reindex kopf plugin
  • 42. Index template & rolling index Rolling(time-based) index Reconfigure shards & replicas Index template Pattern: plr_sg_tweet_* Define the correct mapping
  • 44. Modify index template Reconfigure shards & replicas Index template Pattern: plr_sg_tweet_* 201603 14 shards 1 replica
  • 45. Indexing performance Tweet bulk-loading indexing performance 1 shard 2 replicas 1.8K/S 14 shards 1 replica 6.6K/S (more than 3X)
  • 46. Alias No change in application code: Alias 201602 = latest
  • 47. Alias Alias 201603 = latest No change in application code:
  • 48. Replicas 201601 data 1 replica ● You can change it on the fly ● Start with 1 for fault tolerance ● What happen when the read request rate is very high?
  • 49. Replicas ● Increase accordingly to ○ balance load ○ increasing the availability ○ scale up read requests 201601 data 6 replicas
  • 50. Lesson Learned ● Read the book ● Define correct mapping ● Index template & rolling indices ● Use `alias` ● Scale up using replicas
  • 51. Q&A We’re Hiring!!! bit.ly/larchiring Elastic Training in Singapore: ● Core Elasticsearch: Operations 25 April 2016 ● Core Elasticsearch: Developer 26-27 April 2016 training.elastic.co