anwendungsfälle für elasticsearch javaland 2015

59
Anwendungsfälle für Florian Hopf - @fhopf

Upload: florian-hopf

Post on 16-Jul-2015

1.631 views

Category:

Data & Analytics


0 download

TRANSCRIPT

Page 1: Anwendungsfälle für Elasticsearch JavaLand 2015

Anwendungsfälle für

Florian Hopf - @fhopf

Page 2: Anwendungsfälle für Elasticsearch JavaLand 2015

Agenda

Page 3: Anwendungsfälle für Elasticsearch JavaLand 2015

Vorbereitung

Page 4: Anwendungsfälle für Elasticsearch JavaLand 2015

Installation

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

elasticsearch/elasticsearch/elasticsearch-1.4.4.zip

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

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

Page 5: Anwendungsfälle für Elasticsearch JavaLand 2015

Zugriff

curl -XGET http://localhost:9200{ "status" : 200, "name" : "Anomalito", "cluster_name" : "elasticsearch", "version" : { "number" : "1.4.4", "build_hash" :

"c88f77ffc81301dfa9dfd81ca2232f09588bd512", "build_timestamp" : "2015-02-19T13:05:36Z", "build_snapshot" : false, "lucene_version" : "4.10.3" }, "tagline" : "You Know, for Search"}

Page 6: Anwendungsfälle für Elasticsearch JavaLand 2015

Document Store

Page 7: Anwendungsfälle für Elasticsearch JavaLand 2015

Document

{ "title" : "Anwendungsfälle für Elasticsearch", "speaker" : "Florian Hopf", "date" : "2015-03-24T11:00:00.000Z", "tags" : ["Java", "Lucene"], "conference" : { "name" : "JavaLand", "city" : "Brühl" } }

Page 8: Anwendungsfälle für Elasticsearch JavaLand 2015

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: Anwendungsfälle für Elasticsearch JavaLand 2015

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: Anwendungsfälle für Elasticsearch JavaLand 2015

Speichern

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

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

}

Type

Page 11: Anwendungsfälle für Elasticsearch JavaLand 2015

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" : "2015-03-24T11:00:00.000Z", "tags" : ["Java", "Lucene"], "conference" : { "name" : "JavaLand", "city" : "Brühl" } }}

Page 12: Anwendungsfälle für Elasticsearch JavaLand 2015

Sharding

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

● Mehrere ES-Instanzen bilden einen Cluster● Automatische Verteilung auf die Knoten

Page 13: Anwendungsfälle für Elasticsearch JavaLand 2015

Sharding

Page 14: Anwendungsfälle für Elasticsearch JavaLand 2015

Recap

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

Page 15: Anwendungsfälle für Elasticsearch JavaLand 2015

Nutzer

● Atlassian HipChat● http://highscalability.com/blog/2014/1/6/how-hipchat-stores-and-indexes-billions-of-messages-using-el.html

● OpenCrowd● https://www.elastic.co/use-cases/open-crowd

Page 16: Anwendungsfälle für Elasticsearch JavaLand 2015

Volltextsuche

Page 17: Anwendungsfälle für Elasticsearch JavaLand 2015
Page 18: Anwendungsfälle für Elasticsearch JavaLand 2015
Page 19: Anwendungsfälle für Elasticsearch JavaLand 2015

Suche per Parametercurl -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 20: Anwendungsfälle für Elasticsearch JavaLand 2015

Query-DSLcurl -XGET "http://localhost:9200/conference/talk/_search" -d'

{

"query": {

"filtered": {

"query": {

"match": {

"title": "elasticsearch"

}

},

"filter": {

"term": {

"tags": "java"

}

}

}

}

}'

Page 21: Anwendungsfälle für Elasticsearch JavaLand 2015

Query-DSL

client.prepareSearch("conferences")

.setQuery(filteredQuery(

matchQuery("title", "elasticsearch"),

termFilter("tag", "java")))

.execute()

.actionGet();

Page 22: Anwendungsfälle für Elasticsearch JavaLand 2015

Sprache

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

{

[...]

},

"hits" : {

"total" : 0,

"max_score" : null,

"hits" : [ ]

}

}

Page 23: Anwendungsfälle für Elasticsearch JavaLand 2015

Mapping

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

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

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

{

"properties": {

"title": {

"type": "string",

"analyzer": "german"

}

}

}'

Page 24: Anwendungsfälle für Elasticsearch JavaLand 2015

Sprache

curl -XGET

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

{

[...]

},

"hits" : {

"total" : 1,

[...]

}

}

Page 25: Anwendungsfälle für Elasticsearch JavaLand 2015

Was noch?

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

Page 26: Anwendungsfälle für Elasticsearch JavaLand 2015

Recap

● Ausdrucksstarke Suchen über Query DSL● Analyzing und Mapping● Lucene bietet viele Search-Features

Page 27: Anwendungsfälle für Elasticsearch JavaLand 2015

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/● XING

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

Page 28: Anwendungsfälle für Elasticsearch JavaLand 2015

Flexibler Cache

Page 29: Anwendungsfälle für Elasticsearch JavaLand 2015

Setup Suche

Anwendung

DB

Page 30: Anwendungsfälle für Elasticsearch JavaLand 2015

Nur Suche?

Page 31: Anwendungsfälle für Elasticsearch JavaLand 2015

Queries

Anwendung

DB

Page 32: Anwendungsfälle für Elasticsearch JavaLand 2015

Ergebnislisting

curl -XPOST "http://localhost:9200/conferences/_search " -d'

{

"filter": {

"term": {

"tags": "java"

}

}

}'

Page 33: Anwendungsfälle für Elasticsearch JavaLand 2015

Geo-SucheGeo-Suche

Page 34: Anwendungsfälle für Elasticsearch JavaLand 2015

Anwendungen

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

Page 35: Anwendungsfälle für Elasticsearch JavaLand 2015

Document{

"title" : "Anwendungsfälle für Elasticsearch",

"speaker" : "Florian Hopf",

"date" : "2014-07-17T15:35:00.000Z",

"tags" : ["Java", "Lucene"],

"conference" : {

"name" : "JavaLand",

"city" : "Brühl",

"coordinates": {

"lon": "6.88125",

"lat": "50.7984642"

}

}

}

Page 36: Anwendungsfälle für Elasticsearch JavaLand 2015

Mappingcurl -XPUT "http://localhost:9200/conferences/talk/_mapping" -d'

{

"properties": {

[…],

"conference": {

"type": "object",

"properties": {

"coordinates": {

"type": "geo_point"

}

}

}

}

}'

Page 37: Anwendungsfälle für Elasticsearch JavaLand 2015

Filterung

curl -XPOST "http://localhost:9200/conferences/_search" -d'

{

"filter": {

"geo_distance": {

"conference.coordinates": {

"lon": 8.403697,

"lat": 49.006616

},

"distance": "300km",

"distance_type": "arc"

}

}

}'

Page 38: Anwendungsfälle für Elasticsearch JavaLand 2015

Recap

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

Page 39: Anwendungsfälle für Elasticsearch JavaLand 2015

User

● FourSquare● http://engineering.foursquare.com/2012/08/09/fo

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

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

Page 40: Anwendungsfälle für Elasticsearch JavaLand 2015

Logfile-AnalyseLog-Analyse

Page 41: Anwendungsfälle für Elasticsearch JavaLand 2015

Logfile-Analyse

● Zentralisierung Logs aus Anwendungen● Zentralisierung Logs über Maschinen

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

Page 42: Anwendungsfälle für Elasticsearch JavaLand 2015

Logfile-Analyse

● Einlesen● Logstash

● Speicherung● Elasticsearch

● Auswertung● Kibana

Page 43: Anwendungsfälle für Elasticsearch JavaLand 2015

Logfile-Analyse

Page 44: Anwendungsfälle für Elasticsearch JavaLand 2015

Logstash-Config

input {

file {

path => "/var/log/apache2/access.log"

}

}

filter {

grok {

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

}

}

output {

elasticsearch_http {

host => "localhost"

}

}

Page 45: Anwendungsfälle für Elasticsearch JavaLand 2015

Kibana

Page 46: Anwendungsfälle für Elasticsearch JavaLand 2015

Recap

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

Page 47: Anwendungsfälle für Elasticsearch JavaLand 2015

User

● 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 48: Anwendungsfälle für Elasticsearch JavaLand 2015

AnalyticsAnalytics

Page 49: Anwendungsfälle für Elasticsearch JavaLand 2015

Analytics

● Auswertung auch großer Datenmengen● Social Media ● Data Warehouse

● Aggregationen auf Feldern● Datenkonsolidierung aus unterschiedlichen

Quellen● Visualisierung

Page 50: Anwendungsfälle für Elasticsearch JavaLand 2015

Aggregations

curl -XGET "http://localhost:9200/devoxx/tweet/_search" -d'

{

"aggs" : {

"hashtags" : {

"terms" : {

"field" : "hashtag.text"

}

}

}

}'

Page 51: Anwendungsfälle für Elasticsearch JavaLand 2015

Aggregations

"aggregations": {

"hashtags": {

"buckets": [

{

"key": "dartlang",

"doc_count": 229

},

{

"key": "java",

"doc_count": 216

},

[...]

Page 52: Anwendungsfälle für Elasticsearch JavaLand 2015

Aggregations

"aggs" : {

"hashtags" : {

"terms" : {

"field" : "hashtag.text"

},

"aggs" : {

"hashtagusers" : {

"terms" : {

"field" : "user.screen_name"

}

}

}

}

}

Page 53: Anwendungsfälle für Elasticsearch JavaLand 2015

Aggregations

"key": "scala",

"doc_count": 130,

"hashtagusers": {

"buckets": [

{

"key": "jaceklaskowski",

"doc_count": 74

},

{

"key": "ManningBooks",

"doc_count": 3

},

[...]

Page 54: Anwendungsfälle für Elasticsearch JavaLand 2015

Visualisierung

Page 55: Anwendungsfälle für Elasticsearch JavaLand 2015

Recap

● Auswertung großer Datenmengen● Visualisierung● Zahlreiche Aggregationen

● Bucket-Aggregations● Metric-Aggregations

Page 56: Anwendungsfälle für Elasticsearch JavaLand 2015

User

● Cogenta● https://www.elastic.co/use-cases/cogenta

● 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

Page 57: Anwendungsfälle für Elasticsearch JavaLand 2015

Agenda

Page 58: Anwendungsfälle für Elasticsearch JavaLand 2015

Vielen Dank!

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

Page 59: Anwendungsfälle für Elasticsearch JavaLand 2015

Images

● 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