anwendungsfaelle für elasticsearch

64
Anwendungsfälle für Florian Hopf @fhopf http://www.florian-hopf.de 15.07.2014

Upload: florian-hopf

Post on 11-Aug-2014

741 views

Category:

Data & Analytics


4 download

DESCRIPTION

German slides for different use cases for Elasticsearch: Document Store, full text search, flexible query cache, geospatial search, logfile analytics, analytics.

TRANSCRIPT

Page 1: Anwendungsfaelle für Elasticsearch

Anwendungsfälle für

Florian Hopf

@fhopf

http://www.florian-hopf.de 15.07.2014

Page 2: Anwendungsfaelle für Elasticsearch

Agenda

Page 3: Anwendungsfaelle für Elasticsearch

Vorbereitung

Page 4: Anwendungsfaelle für Elasticsearch

curl -XGET http://localhost:9200{

"status" : 200,"name" : "Hawkeye", "version" : {

"number" : "1.2.1","build_hash" : "6c95b759f9e7ef0f8e17f77d850da43ce8a4b364","build_timestamp" : "2014-06-03T15:02:52Z",

"build_snapshot" : false, "lucene_version" : "4.8" }, "tagline" : "You Know, for Search"}

Installation

curl -XGET http://localhost:9200{

"status" : 200,"name" : "Hawkeye", "version" : {

"number" : "1.2.1","build_hash" : "6c95b759f9e7ef0f8e17f77d850da43ce8a4b364","build_timestamp" : "2014-06-03T15:02:52Z",

"build_snapshot" : false, "lucene_version" : "4.8" }, "tagline" : "You Know, for Search"}

# download archivewget https://download.elasticsearch.org/

elasticsearch/elasticsearch/elasticsearch-1.2.1.zip

# zip is for windows and linuxunzip elasticsearch-1.2.1.zip

# on windows: elasticsearch.batelasticsearch-1.2.1/bin/elasticsearch

Page 5: Anwendungsfaelle für Elasticsearch

curl -XGET http://localhost:9200{

"status" : 200,"name" : "Hawkeye", "version" : {

"number" : "1.2.1","build_hash" : "6c95b759f9e7ef0f8e17f77d850da43ce8a4b364","build_timestamp" : "2014-06-03T15:02:52Z",

"build_snapshot" : false, "lucene_version" : "4.8" }, "tagline" : "You Know, for Search"}

Zugriff

curl -XGET http://localhost:9200{

"status" : 200,"name" : "Hawkeye", "version" : {

"number" : "1.2.1","build_hash" : "6c95b759f9e7ef0f8e17f77d850da43ce8a4b364","build_timestamp" : "2014-06-03T15:02:52Z",

"build_snapshot" : false, "lucene_version" : "4.8" }, "tagline" : "You Know, for Search"}

curl -XGET http://localhost:9200{

"status" : 200,"name" : "Hawkeye", "version" : {

"number" : "1.2.1","build_hash" : "6c95b759f9e7ef0f8e17f77d850da43ce8a4b364","build_timestamp" : "2014-06-03T15:02:52Z",

"build_snapshot" : false, "lucene_version" : "4.8" }, "tagline" : "You Know, for Search"}

Page 7: Anwendungsfaelle für Elasticsearch

Document

{ "title" : "Anwendungsfälle für Elasticsearch", "speaker" : "Florian Hopf", "date" : "2014-07-15T16:30:00.000Z", "tags" : ["Java", "Lucene"], "conference" : { "name" : "Developer Week", "city" : "Nürnberg" } }

Page 8: Anwendungsfaelle für Elasticsearch

Speichern

curl -XPOST http://localhost:9200/conferences/talk/ --data-binary @talk-example.json

{"_index":"conferences","_type":"talk","_id":"GqjY7l8sTxa3jLaFx67_aw","_version":1,"created":true

}

Page 9: Anwendungsfaelle für Elasticsearch

Speichern

curl -XPOST http://localhost:9200/conferences/talk/ --data-binary @talk-example.json

{"_index":"conferences","_type":"talk","_id":"GqjY7l8sTxa3jLaFx67_aw","_version":1,"created":true

}

Index

Page 10: Anwendungsfaelle für Elasticsearch

Speichern

curl -XPOST http://localhost:9200/conferences/talk/ --data-binary @talk-example.json

{"_index":"conferences","_type":"talk","_id":"GqjY7l8sTxa3jLaFx67_aw","_version":1,"created":true

}

Index Type

Page 11: Anwendungsfaelle für Elasticsearch

Lesen

curl -XGET http://localhost:9200/conferences/talk/GqjY7l8sTxa3jLaFx67_aw?pretty=true

{ "_index" : "conferences",

[...] "_source":{ "title" : "Anwendungsfälle für Elasticsearch", "speaker" : "Florian Hopf", "date" : "2014-07-15T16:30:00.000Z", "tags" : ["Java", "Lucene"], "conference" : { "name" : "Developer Week", "city" : "Nürnberg" } }}

Page 12: Anwendungsfaelle für Elasticsearch

Sharding

● Aufteilen eines Index in mehrere Teile– Default: 5 Shards pro Elasticsearch-Index

● Mehrere Elasticsearch-Instanzen können einen Cluster bilden– Automatische Verteilung auf die Knoten im Cluster

Page 13: Anwendungsfaelle für Elasticsearch

Sharding

Page 14: Anwendungsfaelle für Elasticsearch

Sharding

Page 15: Anwendungsfaelle für Elasticsearch

Sharding

Page 16: Anwendungsfaelle für Elasticsearch

● Einfache Speicherung von JSON-Dokumenten● Index und Type● Sharding für große Datenmengen● Verteilung ist First Class Citizen

Recap

Page 17: Anwendungsfaelle für Elasticsearch

Users

● HipChat – http://highscalability.com/blog/2014/1/6/how-hipchat-stores-and-

indexes-billions-of-messages-using-el.html

● Engagor– http://www.jurriaanpersyn.com/archives/2013/11/18/introduction-to-

elasticsearch/

– http://www.elasticsearch.org/case-study/engagor/

Page 18: Anwendungsfaelle für Elasticsearch

Volltextsuche

Page 19: Anwendungsfaelle für Elasticsearch
Page 20: Anwendungsfaelle für Elasticsearch
Page 21: Anwendungsfaelle für Elasticsearch

Suche per Parameter

curl -XGET "http://localhost:9200/conferences/talk/_search?q=elasticsearch&pretty=true"

{"took" : 73,[…] "hits" : {

[…] "hits" : [ {

[…] "_score" : 0.076713204, "_source":{ "title" : "Anwendungsfälle für Elasticsearch", "tags" : ["Java", "Lucene"],

[…]} } ] }}

Page 22: Anwendungsfaelle für Elasticsearch

Query DSL

curl -XPOST "http://localhost:9200/conferences/_search " -d'{ "query": { "match": { "title" : { "query": "elasticsaerch", "fuzziness": 2 } } }, "filter": { "term": { "conference.city": "nürnberg" } }}'

Page 23: Anwendungsfaelle für Elasticsearch

Sprache

curl -XGET "http://localhost:9200/conferences/talk/_search?q=title:anwendungsfall&pretty=true"

{ "took" : 2, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 0, "max_score" : null, "hits" : [ ] }}

Page 24: Anwendungsfaelle für Elasticsearch

Term Document Id

anwendungsfall 1

elasticsearch 1,2

fur 1

mit 1

such 1

verteilt 1

1. Tokenization

2. Lowercasing

3. Stemming

Anwendungsfällefür Elasticsearch

Verteiltes Suchen mit

Elasticsearch

Analyzing

Page 25: Anwendungsfaelle für Elasticsearch

Mapping

curl -XDELETE "http://localhost:9200/conferences/"

curl -XPUT "http://localhost:9200/conferences/“

curl -XPUT "http://localhost:9200/conferences/talk/_mapping" -d'{ "properties": { "tags": { "type": "string", "index": "not_analyzed" }, "title": { "type": "string", "analyzer": "german" } }}'

Page 26: Anwendungsfaelle für Elasticsearch

Sprache

curl -XGET "http://localhost:9200/conferences/talk/_search?q=title:anwendungsfall&pretty=true"

{ "took" : 2, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 1,

[…] }}

Page 27: Anwendungsfaelle für Elasticsearch

Was noch?

● Faceting/Aggregations● Suggestions● Highlighting● Sortierung● Pagination● ...

Page 28: Anwendungsfaelle für Elasticsearch

Recap

● Ausdrucksstarke Suchen über Query DSL● Analyzing als Kernfunktionaltät● Alle Lucene-Goodies verfügbar

Page 29: Anwendungsfaelle für Elasticsearch

Users

● GitHub– http://exploringelasticsearch.com/github_interview.html

– http://www.elasticsearch.org/case-study/github/

● StackOverflow– http://meta.stackexchange.com/questions/160100/a-new-search-engine-for-stack-exchange

– http://nickcraver.com/blog/2013/11/22/what-it-takes-to-run-stack-overflow/

● SoundCloud– http://developers.soundcloud.com/blog/architecture-behind-our-new-search-and-explore-experience

– http://www.elasticsearch.org/case-study/soundcloud/

● XING– http://www.elasticsearch.org/case-study/xing/

Page 30: Anwendungsfaelle für Elasticsearch

Flexibler Cache

Page 31: Anwendungsfaelle für Elasticsearch

Anwendung

DB

Setup Suche

Page 32: Anwendungsfaelle für Elasticsearch

Nur Suche?

Page 33: Anwendungsfaelle für Elasticsearch

Anwendung

DB

Queries

Page 34: Anwendungsfaelle für Elasticsearch

Listing

curl -XPOST "http://localhost:9200/conferences/_search " -d'{ "filter": { "term": { "conference.city": "nürnberg" } }}'

Page 35: Anwendungsfaelle für Elasticsearch

Geo-Suche

Page 36: Anwendungsfaelle für Elasticsearch

Strukturierte Suche

● Nicht nur Volltext– Strukturierte Daten: Geo- und numerische Daten, Datumswerte

● Geopoint als Datentyp● Sortierung● Filterung

Page 37: Anwendungsfaelle für Elasticsearch

Anwendungen

● Zeige nächste Filiale● Filialsuche● Sortierung Kleinanzeigen● Sortierung Locations● Filterung auf Nähe● Social Media-Analysen

Page 38: Anwendungsfaelle für Elasticsearch

Document

{ "title" : "Anwendungsfälle für Elasticsearch", "speaker" : "Florian Hopf", "date" : "2014-07-15T16:30:00.000Z", "tags" : ["Java", "Lucene"], "conference" : { "name" : "Developer Week", "city" : "Nürnberg",

"coordinates": {"lon": "11.115358","lat": "49.417175"

} } }

Page 39: Anwendungsfaelle für Elasticsearch

Mapping

curl -XPUT "http://localhost:9200/conferences/talk/_mapping" -d'{ "properties": {

[…], "conference": { "type": "object", "properties": { "coordinates": { "type": "geo_point" } } } }}'

Page 40: Anwendungsfaelle für Elasticsearch

Sortierung

curl -XPOST "http://localhost:9200/conferences/_search " -d'{ "sort" : [ { "_geo_distance" : { "conference.coordinates" : { "lon": 8.403697, "lat": 49.006616 }, "order" : "asc", "unit" : "km" } } ]}'

Page 41: Anwendungsfaelle für Elasticsearch

Filterung

curl -XPOST "http://localhost:9200/conferences/_search" -d'{ "filter": { "geo_distance": { "conference.coordinates": { "lon": 8.403697, "lat": 49.006616 }, "distance": "200km", "distance_type": "arc" } }}'

Page 42: Anwendungsfaelle für Elasticsearch

Recap

● Elasticsearch kann mehr als Volltext● Ausgefeilte Geo-Algorithmen● Sortierung nach Distanz● Filterung nach Distanz oder Bereich● Berechnung von Distanz

Page 43: Anwendungsfaelle für Elasticsearch

Users

● FourSquare– http://engineering.foursquare.com/2012/08/09/foursquare-now-uses-

elastic-search-and-on-a-related-note-slashem-also-works-with-elastic-search/

● Gild– http://www.elasticsearch.org/case-study/gild/

Page 44: Anwendungsfaelle für Elasticsearch

Logfile-Analyse

Page 45: Anwendungsfaelle für Elasticsearch

Logfile-Analyse

● Zentralisierung Logs aus Anwendungen● Zentralisierung Logs über Maschinen

– Auch ohne Zugriff

● Leichte Durchsuchbarkeit● Real-Time-Analysis / Visualisierung● Daten für alle!

Page 46: Anwendungsfaelle für Elasticsearch

Logfile-Analyse

● Einlesen– Logstash

● Speicherung– Elasticsearch

● Auswertung– Kibana

Page 47: Anwendungsfaelle für Elasticsearch

Logfile-Analyse

Page 48: Anwendungsfaelle für Elasticsearch

Logstash-Config

input { file { path => "/var/log/apache2/access.log" }}

filter { grok { match => { message => "%{COMBINEDAPACHELOG}" } }}

output { elasticsearch_http { host => "localhost" }}

Page 49: Anwendungsfaelle für Elasticsearch

Kibana

Page 50: Anwendungsfaelle für Elasticsearch

Recap

● Einlesen, Anreichern, Speichern von Logevents● Zahlreiche Inputs in Logstash● Konsolidierung● Zentralisierung● Auswertung

Page 51: Anwendungsfaelle für Elasticsearch

Users

● Mailgun– http://www.elasticsearch.org/blog/using-elasticsearch-and-logstash-

to-serve-billions-of-searchable-events-for-customers/

● CERN– https://medium.com/@ghoranyi/needle-in-a-haystack-873c97a99983

● Bloomberg– http://www.elasticsearch.org/videos/using-elasticsearch-logstash-

kibana-techologies-centralized-viewing-logs-bloomberg/

Page 52: Anwendungsfaelle für Elasticsearch

Analytics

Page 53: Anwendungsfaelle für Elasticsearch

Analytics

● Aggregationen auf Feldern● Auswertung auch großer Datenmengen

– Social Media

– Data Warehouse

● Datenkonsolidierung aus unterschiedlichen Quellen● Visualisierung

Page 54: Anwendungsfaelle für Elasticsearch

Aggregations

curl -XGET "http://localhost:9200/devoxx/tweet/_search" -d'{ "aggs" : { "hashtags" : { "terms" : { "field" : "hashtag.text" } } }}'

Aggregations

Page 55: Anwendungsfaelle für Elasticsearch

Aggregations

"aggregations": { "hashtags": { "buckets": [ { "key": "dartlang", "doc_count": 229 }, { "key": "java", "doc_count": 216 }, [...]

Aggregations

Page 56: Anwendungsfaelle für Elasticsearch

Aggregations

curl -XGET "http://localhost:9200/devoxx/tweet/_search" -d'{ "aggs" : { "hashtags" : { "terms" : { "field" : "hashtag.text" }, "aggs" : { "hashtagusers" : { "terms" : { "field" : "user.screen_name" } } } } }}'

Aggregations

Page 57: Anwendungsfaelle für Elasticsearch

Aggregations

"key": "scala", "doc_count": 130, "hashtagusers": { "buckets": [ { "key": "jaceklaskowski", "doc_count": 74 }, { "key": "ManningBooks", "doc_count": 3 },

[...]

Aggregations

Page 58: Anwendungsfaelle für Elasticsearch

● Bucket Aggregations– terms

– (date_)histogram

– range

– significant_terms

– ...

● Metrics Aggregations– min, max, sum, avg

– stats

– percentiles

– value_count

– ...

Aggregations

Page 59: Anwendungsfaelle für Elasticsearch

Tweets

Page 60: Anwendungsfaelle für Elasticsearch

Recap

● Auswertung großer Datenmengen● Visualisierung● Zahlreiche Aggregationen

– Berechnungen, max, min, mean

– Terms, SignificantTerms

Page 61: Anwendungsfaelle für Elasticsearch

Users

● Engagor● The Guardian

– http://www.elasticsearch.org/blog/using-elasticsearch-and-logstash-to-serve-billions-of-searchable-events-for-customers/

– http://www.infoq.com/presentations/elasticsearch-guardian

● Cogenta– http://www.elasticsearch.org/case-study/cogenta/

Page 62: Anwendungsfaelle für Elasticsearch

Agenda

Page 63: Anwendungsfaelle für Elasticsearch

@fhopf [email protected] http://blog.florian-hopf.de

Vielen Dank!

Page 64: Anwendungsfaelle für Elasticsearch

● http://www.morguefile.com/archive/display/685952● http://www.morguefile.com/archive/display/2359● http://www.morguefile.com/archive/display/615356● http://www.morguefile.com/archive/display/914733● http://www.morguefile.com/archive/display/826258● http://www.morguefile.com/archive/display/170605● http://www.morguefile.com/archive/display/181488

Images