Elasticsearch
zaginiony manual
O mnie
Szymon Teżewski
@jasisz1
jasisz.jogger.pl
Co to jest?
Elasticsearch to silnik wyszukiwania
oparty o Apache Lucene.
- wielodostępny
- rozproszony
- schema-free
- w czasie rzeczywistym
- JSON po HTTP
Shay Bannon
największy plus i minus
Terminy
Indeks
Klaster
setup
Uwaga na wersje
Wszystkie w klastrze muszą być takie same.
Z wersji na wersję niektóre specyficzne zachowania zmieniają się i to niestety można odczuć...
Jak tworzymy klaster?
Najlepiej sami.
discovery.zen.ping.multicast.ping.enabled: false
discovery.zen.ping.unicast.hosts: [host1,host2]
discovery.zen.minimum_master_nodes: 2
node.name: "Kapitan Żbik"
Nazywamy indeks
Nie nazywaj indeksu tak jakbyś chciał go nazwać!
Nazwij alias tak jakbyś chciał nazwać indeks.
Na zewnątrz używaj nazw aliasów.
Liczba SHardów
Nie można jej zmienić bez przeindeksowania.
Domyślne pięć to za mało.
Nic nie szkodzi dać więcej.
Monitorowanie
https://github.com/karmi/elasticsearch-paramedic
Zagadka
co jest balansowane pomiędzy nodami?
Liczba shardów!
I nie bardzo można to zmienić...
W pracy
REST API
Super sprawa!
curl -XDELETE 'http://localhost:9200/_all/'
To da się wyłączyć:
action.disable_delete_all_indices: true
Ale to żadna pomoc.
Schema-Free!
curl -XPUT 'http://localhost:9200/pywaw/speaker/1' -d '{ "nick": "jasisz", "name": "Szymon", "height": 188 }'
>>>{"ok":true,"_index":"pywaw","_type":"speaker","_id":"1","_version":1}
curl -XPUT 'http://localhost:9200/pywaw/speaker/2' -d '{
"email": "bazooka@cannon.com",
"surname": "Hałas"
}
>>>
{"ok":true,"_index":"pywaw","_type":"speaker","_id":"2","_version":1}
Ale jak...
curl -XPUT 'http://localhost:9200/pywaw/speaker/3' -d '{ "nick": "Dziwny człowiek", "height": "6 stóp" }'
>>>{"error":"MapperParsingException[Failed to parse [height]]; nested: NumberFormatException[For input string: \"6 stóp\"]; ","status":400}
MAPPING
curl -XGET localhost:9200/pywaw/speaker/_mapping?pretty=1
{
"speaker" : {
"properties" : {
"email" : {
"type" : "string"
},
"height" : {
"type" : "long"
},
"name" : {
"type" : "string"
},
"nick" : {
"type" : "string"
},
"surname" : {
"type" : "string"
}
}
}
Mapping 2
curl -XPUT localhost:9200/pywaw/speaker/_mapping -d'{ "speaker" : { "properties" : { "height" : { "type" : "string" } } } }'
>>>{"error":"MergeMappingException[Merge failed with failures {[mapper [height] of different type, current_type [long], merged_type [string]]}]","status":400}
Nie warto ryzykować - nałóż mapping zanim zaczniesz indeksować!
To nie jest PYWAW?
gdzie ten Python!?
Requests
Bo czemu by nie?
Pyes
Ludzie używają, ale przestają.
Gdzie macie dokumentację?
pyelasticsearch
Nie jest głupi!
Robi to samo w jednym dłuższym pliku.
DJango-Haystack
spalić i zaorać!
Elasticutils
Dużo wyższy poziom.
Warto spróbować.
Elasticsearch
By Szymon Teżewski
Elasticsearch
- 5,178