elasticsearch.
flexible and powerful open source, distributed real-time
search and analytics engine for the cloud
by @timglabisch
Danke fürs kommen.
Ich bin Tim Glabisch , arbeite für AnyMotion Graphics .
Hab schon mehrfach festgestellt, dass Suchen mit einer Relationalen Datenbank keinen Spass machen.
Performance
viel Aufwand
Features fehlen - Volltextsuchen, Facetten, u.s.w.
fork me on github!
fast alles paktische Beispiele !
is for search
kein Ersatz für relationale Datenbanken
kein Ersatz für NoSql Datenbanken - oder?
has brilliant defaults
großartige Standards
Automapping
"Tabellen" werden beim Insert von Daten angelegt
Server finden sich automatisch
Schneller Einstieg
is flexible
change everything
complex queries
war oft erstaunt was es alles kann und wie man dies beeinflussen kann
Durchdachte Details geosuche mir beliebigen Formen auf der Karte
modular - plugin api's - google guice
verständlicher und sauber programmiert
Beispiel einer Suchmaske
Github
Suchwort 42 - nicht nach der Antwort suchen :)
Facetten - Aggregatoren
Facetten - Relatione Datenbank!?
Facetten brauchen RAM !
Highlighting von Textstücken
Advanced Search
Real time data , Real time analytics, Distributed, High availability, Multi-tenancy, Full text search
Document oriented, Conflict management, Schema free , RESTful API , Per-operation persistence,
Apache 2 Open Source License, Build on top of Apache Lucene ™
so beschreibt sich Elasticsearch
fast alles für heute unwichtig!
Realtime kann nicht jeder Suchserver - Realtime bedeutet wenige Sekunden nach dem Indizieren
Elasticsearch nutzt Rest
lots of api's...
Search >
Query, Highlighting, Suggest, Facets, Min Score, Scroll, Explain, Version, ...
Indices >
Aliases, Analyze, Create Index, Delete Index, Open/Close Index, Get Settings, Get Mapping, Put Mapping, Delete Mapping,
Refresh, Optimize, Flush, Snapshot, Update Settings, Templates, Warmers, Stats, Status, Segments, Clear Cache, Indices Exists, Types Exists, ...
Cluser >
Health, State, Update Settings, Nodes Info, Nodes Stats, Nodes Shutdown, Nodes Hot Threads, Cluster reroute
Complex Queries >
match, multi_match, bool, boosting, ids, custom_score, custom_boost_factor, constant_score, dis_max,
field, filtered, flt, flt_field, fuzzy, has_child, has_parent, match_all, mlt, mlt_field, prefix,
query_string, range, span_first, span_near, span_not, span_or, span_term, term, terms, top_children, wildcard,
nested, custom_filters_score, indices, text, geo_shape, and, bool, exists, ids, limit, type, geo_bbox, geo_distance, geo_distance_range,
geo_polygon, geo_shape, has_child, has_parent, match_all, missing, not, numeric_range, or, prefix, query, range, script, term
terms, nested
Routings > ...
Mappings > ...
Modules > ...
River > ...
...
bitte nicht lesen !
es kann viel. wirklich. - detailverliebte api
Manual ist vollständig - aber wirklich ein Handbuch .
Buch - Jede Seite neue Funktionen.
Funktionen sind kombinierbar und wirklich sinnvoll und flexibel !
elasticsearch
in action...
genug der theorie
wir schauen uns das an, was für eure erste Suchanwendung wichtig .
mein Ziel - ihr geht nach hause und könnt eine 0-8-15 Suchmaske bauen .
install
1. Download and unzip the latest Elasticsearch distribution.
2. Run bin/elasticsearch -f on Unix.
installation ist einfach
runterladen
ausführen
default Einstellungen sind alle brauchbar!
init Skripte runderladen.
bin/elasticsearch -f
-f für frontend , zeigt Fehler
startet auf nächstem freien Port ab port 9200
super zum debuggen
strg + C zum beenden
als Service einfach ohne -f
ihr könnt auch mehrere Instanzen starten
org/elasticsearch/node/internal/InternalNode.java#L136
elasticsearch ist modular
code sieht sehr sauber aus
veschiedene module werden gestartet
nutzt netty und guice
plugin api vorhanden
discovery modul findet andere Instanzen - broadcast, ip liste, amazon, ...
Rest modul für alle Rest anfragen
Bulk modul für größere Mengen von Daten, Udp auch möglich.
be aware
- term queries use OR by default!
- know the tokenizer, there is no # elasticsearch token!
ODER / OR
merkt euch die Slide
war mein erster "Fehler" mit elasticsearch
wie aber setzen wir es dann um?
- json is awesome to build queries .
- easy to write complex queries
- mix different query types
match, multi_match, bool , boosting, ids, custom_score,
custom_boost_factor, constant_score, dis_max, field, filtered, flt,flt_field,
fuzzy, has_child, has_parent, match_all, mlt, mlt_field, prefix, query_string,
range, span_first, span_near, span_not, span_or, span_term, term , terms, top_children
wildcard, nested, custom_filters_score, indices, text, geo_shape
look at the manual
sql strings bauen ist fehleranfällig
ich habe schon kuriose möglichkeiten gesehen wie sql zusammengebaut wird
ich habe schn projekte gesehen die daran gescheitert sind
json zu modifizieren ist eine gute möglichkeit
viele verschiedene Suchtypen
beispielsweise kurioseste formen auf einer karte für geosuchen...
alle lassen sich kombinieren
Aggregationen
Performanceprobleme bei relationalen Datenbanken
können unterschiedliche filter beinhalen, z.b. eine programmiersprache
different search phases.
src/main/java/org/elasticsearch/search/query/QueryPhase.java#L128
the breakpoint is awesome to debug the generated lucene query.
verschiedene Suchphasen
werden unabhängig von der Query Phast und der Suggestion Phase ausgeführt
eine Anfrage kann eine Query sowie Facetten beinhalten
stelle ist gut zum debuggen
elasticsearch hat hier die Anfrage zu einer Lucene Anfrage umgebaut
zwei Beispiele
das Rote soll das Grüne nicht filtern
Facetten dürfen sich nicht selbst ausschließen
Oberkategorien sollen noch anzeigbar und anklickbar sein
Facetten müssen Filtermöglichkeiten beeinflussen können
Filters
Teilabfragen können unabhängig gefiltert werden.
Filter sind Subqueries die sich nur auf Teile der Abfrage beziehen - Facetten, Subqueries, ...
Filter sind performant
filters are awesome flexible, cacheable and reduce the number of requests.
Shards
Datenblöcke welche verschoben werden können
Daten werden automatisch in Shards unterteilt
Anzahl der Shards müssen beim Erstellen des Indizes bekannt sein
Kleine Datenmenge = wenig Shards
Weniger Shards = bessere Performance
Weniger Shards = weniger mögl. Daten
Daten werden unterteilt - Standard 5 Unterteilungen - auch auf einem Server
Bei vielen Daten bessere Performance
Bei wenig Daten schlechtere Performance
Durch reverted Index geringe Datenmengen
Eine Abfrage = Anfrage auf beide Shards
Optimiert durch Bloom Filter u.s.w.
Shards können auf 2 Servern liegen
Shards verschieben ist teuer
Steuerbar über API
Flexibel: Rack, Gruppen, ...
Default: 5
Replicas
Ausfallsicherheit
Performance
Kombination Replica und Shards
Ausfallsicherheit + Performance
Default - Fall genug Server vorhanden
Rot (Server C) fällt weg
Gelb (Server B, D) übernehmen einen Shard
Möglichkeit Performance zu verbessern
ohne Routing
alle Shards müssen angefragt werden
ergnisse aller Shards müssen aggregiert werden
ein Feld kann bestimmen auf welchem Shard es liegt
Anzahl der Shards stehen fest
routing by
- id (default)
- parameter ( /twitter/tweet?routing=timglabisch )
- custom field / path
Gut für die Performance
Möglichkeit für Kundenspzische Suchen, Kategorieabhängige, u.s.w.
Bei vielen Daten zu empfehlen!
Elasticseatch isn't schemaless.
Schemaless steht auf der Startseite
Lüge!
Beweis folgt
the first value for a key maps your types.
sounds ugly but allows to start easy.
Mapping wird beim ersten Insert eines neuen Feldes erraten
Bitte nicht Produktiv so machen.
remapping sucks
Probleme welche man nicht Live haben will!
by mata.gia.rwth-aachen.de
Tokenizer unterteilt Texte in Suchbare tokens
Man sucht immer nach Tokens - nicht nach Textblöcken (Vergleich Mysql Varchar Feld)
lowercase zeigen
ngram zeigen
ngram ist schneller als prefix
CURL -X .../
there are a bunch of tokenizers :
Edge NGram, Keyword, Letter, Lowercase, NGram, Standard, Whitespace, Pattern, UAX URL Email, Path Hierarchy
X
bei marken namen: Coca Cola -> Coca und Cola oder "Coca Cola"
unterschiedlichste, E-Mails, Regex, ...
NGram Example vll. mal zeigen
NGram für Prefix Suche
!%$" it
CURL -X .../
there are a bunch of tokenfilters :
Standard, ASCII Folding, Length, Lowercase, NGram, Edge NGram, Porter Stem, Shingle, Stop, Word Delimiter, Stemmer, and 15 more...
X
Popular Mechanics, US-Technik-Magazin, 1949
filter wie Lowercase, Stopwörter u.s.w.
!%$" it
Gui's
bigdesk
elasticsearch-head
plain javascript / html
bigdesk - viele Statistiken, Monitoring, Replica, Überwachung Cluster
elasticsearch-head - Ajax Maske, Replica, Überwachung Cluster
wenns mal mehr werden
Übersicht der indizes
Übersicht der rechner
Gesundheit des clusters