06 - Mapping

 

Datové typy

Každé pole indexu má určitý datový typ, přičemž:

Nejpoužívanější datové typy, se kterými se budeme setkávat:

Veškeré podporované datové typy jsou specifikovány v dokumentaci.

 

Mapping

Při ukládání dokumentů do Elasticsearch zároveň vznikají metadata obsahující informace o tom, jaké pole má jaký datový typ. Tomu se říká mapping a zobrazit si jej lze pomocí endpointu _mapping:

Cursor_and_Dev_Tools_-_Elastic

V příkladu výše je mapování vytvořeno automaticky na základě ukládaných dat.

Nicméně ne vždy je Elasticsearch schopný správně detekovat datové typy. Například pole code detekované jako text nebude pravděpodobně využito pro fulltextové hledání, takže by vhodným type bylo spíše keyword. V tomto případě je nutné mapování definovat předem. Vytvořme tedy nový prázdný index s správným mapováním:

Následně lze přidat dokument do tohoto indexu:

Nyní při zobrazení mapování pomocí endpointu _mapping:

Dev_Tools_-_Elastic-4749569

Nová pole mohou být do mapování přidána pomocí endpointu _mapping Nová pole budou dostupná pod klíčem properties:

Dev_Tools_-_Elastic-4749853

Při ukládání dokumentů do Elasticsearch musí všechna pole dodržovat existující nastavení. V příkladu výše jsme nastavili pole rating jako číslo pomocí typu half_float. Pokud se ale pokusíme uložit text do pole rating:

Dev_Tools_-_Elastic-4750129

Request skončí s chybou.

 

Mapování pole více způsoby

Občas je nutné jedno pole ukládat více způsoby.

Například si představme výrobce produkt. Ten bude využit pro fulltextové vyhledávání (takže bude typu text). Ale v případě, že bychom chtěli vypsat všechny dostupné výrobce pomocí agregací (které spolupracují s neanalyzovanými poli), bude třeba použít typ keyword.

V tomto případě by mapování vypadalo následovně:

 

Dynamic templates

Pokud nechcete specifikovat mapování pro každé pole zvlášť, lze využít dynamic_templates.

Takto by například vypadalo pravidlo, které vždy uloží string jako keyword:

 

Index templates

Šablony Elasticsearch obecně umožňují nastavit pravidla, která se použijí při splnění určitých podmínek. Například index templates definují nastavení indexů a mapování pro nově vytvořené indexy (pokud jejich názvy odpovídají vzoru).

To je užitečné při vytváření denních indexů se stejným nastavením (což je typické pro Logstash).

Řekněme, že každý nově vytvořený index s názvem začínajícím na test by neměl mít žádné replika shards, protože není určen pro produkční použití. Toho dosáhneme vytvořením šablony:

Nyní, pokud vytvoříte index test_123, neměl by mít žádné repliky. Ale pokud vytvoříte index 123_test Měl by mít defaultní nastavení.

Dev_Tools_-_Elastic-5311210

Index templates mohou být také vytvořeny v Kibana UI: Stack Management > Index Management > Index Templates. Po kliknutí na Create template se zobrazí průvodce:

Index_Management_-_Elastic-5312343

Zvolte název a index pattern:

Index_Management_-_Elastic-5312634

Pokud chcete použít "Component templates" (znovupoužitelné bloky šablon), můžete je vybrat v druhém kroku.

Ve třetím kroku uveďte JSON reprezentující nastavení indexu:

Index_Management_-_Elastic-5312942

Ve čtvrtém kroku lze definovat mappings. Například pro pole uuid, které bude typu keyword:

Index_Management_-_Elastic-5313280

V pátém kroku lze indexu přiřadit alias

V posledním kroku si můžete zkontrolovat request, který bude následně spuštěn:

Index_Management_-_Elastic-5313397

 

Úkol: Mappings

  1. Vytvořte index template nazvanou comments, která bude používat následující mappings pro index nazvaný comments (index bude vytvořen v následujícím kroku):

    FieldType
    titletext
    texttext
    authortext + keyword
    emailkeyword
    visibleboolean
    scoredecimal number
    createddate accepting only format yyyy-MM-dd
  2. Uložte následující dokument do indexu comments:

  3. Nyní zkontrolujte mapování indexu comments. Mělo by odpovídat požadavkům z prvního kroku.