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: falsediscovery.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