SlideShare une entreprise Scribd logo
1  sur  51
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Elasticsearch in 15 minutes
Elasticsearch in 15 minutesElasticsearch in 15 minutes
Elasticsearch in 15 minutesDavid Pilato
 
Introduction to Elasticsearch
Introduction to ElasticsearchIntroduction to Elasticsearch
Introduction to ElasticsearchSperasoft
 
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 databaseRobert Lujo
 
Introduction to Elasticsearch
Introduction to ElasticsearchIntroduction to Elasticsearch
Introduction to ElasticsearchBo 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 LuceneRahul Jain
 
ElasticSearch - DevNexus Atlanta - 2014
ElasticSearch - DevNexus Atlanta - 2014ElasticSearch - DevNexus Atlanta - 2014
ElasticSearch - DevNexus Atlanta - 2014Roy Russo
 
Elasticsearch - DevNexus 2015
Elasticsearch - DevNexus 2015Elasticsearch - DevNexus 2015
Elasticsearch - DevNexus 2015Roy 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 sangam2018Vinay 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 ElasticsearchRuslan Zavacky
 
Intro to Elasticsearch
Intro to ElasticsearchIntro to Elasticsearch
Intro to ElasticsearchClifford 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 ElasticSearchclintongormley
 
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 BhamidpatiRobert Calcavecchia
 
Elastic Search
Elastic SearchElastic Search
Elastic SearchNavule Rao
 
Elasticsearch Basics
Elasticsearch BasicsElasticsearch Basics
Elasticsearch BasicsShifa Khan
 
Simple search with elastic search
Simple search with elastic searchSimple search with elastic search
Simple search with elastic searchmarkstory
 

Tendances (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
 

En vedette

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 SparkDB Tsai
 
Deans-textbook-alternatives
Deans-textbook-alternativesDeans-textbook-alternatives
Deans-textbook-alternativesBruce Gilbert
 
PROEXPOSURE: pushing female perspectives
PROEXPOSURE: pushing female perspectivesPROEXPOSURE: pushing female perspectives
PROEXPOSURE: pushing female perspectivesPROEXPOSURE CIC
 
Новые стандарты по делопроизводству (международная практика).
Новые стандарты по делопроизводству (международная практика).Новые стандарты по делопроизводству (международная практика).
Новые стандарты по делопроизводству (международная практика).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
 
PROEXPOSURE photos: Football
PROEXPOSURE photos: FootballPROEXPOSURE photos: Football
PROEXPOSURE photos: FootballPROEXPOSURE CIC
 
Perpetual Beta Final
Perpetual Beta FinalPerpetual Beta Final
Perpetual Beta FinalMarcus Banks
 
Saturday.presentation 2
Saturday.presentation 2Saturday.presentation 2
Saturday.presentation 2metrolindsay
 
หนึ่ง สอง Automate
หนึ่ง สอง Automateหนึ่ง สอง Automate
หนึ่ง สอง AutomateSomkiat Puisungnoen
 

En vedette (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
 

Similaire à 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 TinkerPopVarun 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-stepsMatteo 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/RailsMichael Reinsch
 
Montreal Elasticsearch Meetup
Montreal Elasticsearch MeetupMontreal Elasticsearch Meetup
Montreal Elasticsearch MeetupLoï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 StoriesArno Broekhof
 
Anwendungsfaelle für Elasticsearch
Anwendungsfaelle für ElasticsearchAnwendungsfaelle für Elasticsearch
Anwendungsfaelle für ElasticsearchFlorian Hopf
 
elasticsearch - advanced features in practice
elasticsearch - advanced features in practiceelasticsearch - advanced features in practice
elasticsearch - advanced features in practiceJano 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 BerlinToshiaki 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, GermanyAndré Ricardo Barreto de Oliveira
 
GraphQL Los Angeles Meetup Slides
GraphQL Los Angeles Meetup SlidesGraphQL Los Angeles Meetup Slides
GraphQL Los Angeles Meetup SlidesGrant 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 elasticsearchFlorian Hopf
 
Elasticsearch in 15 Minutes
Elasticsearch in 15 MinutesElasticsearch in 15 Minutes
Elasticsearch in 15 MinutesKarel Minarik
 

Similaire à 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
 

Dernier

5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Active Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfActive Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfCionsystems
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Clustering techniques data mining book ....
Clustering techniques data mining book ....Clustering techniques data mining book ....
Clustering techniques data mining book ....ShaimaaMohamedGalal
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendArshad QA
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 

Dernier (20)

5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Active Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfActive Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdf
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Clustering techniques data mining book ....
Clustering techniques data mining book ....Clustering techniques data mining book ....
Clustering techniques data mining book ....
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and Backend
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 

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