Pokud bychom měli Elasticsearch spuštěný lokálně, nejjednodušší request by vypadal následovně:
xxxxxxxxxxGET http://localhost:9200
Vzhledem k tomu, že budeme ke spuštění dotazů používat Kibanu, není nutné zadávat adresu Elasticsearch. Ta je již nastavena v konfiguraci Kibany. Stejný request jako výše bude mít v Kibaně následující podobu:
xxxxxxxxxxGET /
Dotaz spustíme šipkou vedle dotazu, výsledek se objeví v pravé části okna:

Kromě toho lze příkaz spustit klávesovou zkratkou ctrl + enter (respektive cmd + enter na Apple). Je také možné nechat kód přeformátovat kliknutím na tři tečky a možnost Auto indent.
Prvním příkazem, kterým lze zjistit stav celého clusteru je odeslání GET requestu na endpoint _cat/health?v (počáteční lomítko můžeme z dotazu vynechat). Zjistíte tak název a status clusteru (tedy stav všech shardů v clusteru). Pokud je vše v pořádku, status je green. Pokud existují shardy, které není možné přiřadit na žádný node (například pokud lokálně nastavíte počet replik větší než 1), bude status yellow. Pokud nejsou některá data vůbec dostupná, bude status red.

Alternativně lze stav clusteru vypsat i v formátu JSON: GET _cluster/health
Cluster se skládá z nodů, vypsat je lze příkazem GET _cat/nodes?v:

Dále budeme pracovat s indexy, jejichž seznam je možné získat requestem GET _cat/indices?v. V cloudu jsou předvytvořené především systémové indexy začínající tečkou. Je zde také index s vzorovými daty:

Endpointy _cat jsou užitečné při zkoumání stavu clusteru. Pokud byste je ale chtěli použít ve skriptech nebo automatizaci, bude lepší použít strojově čitelné varianty vracející JSON, jako _cluster/health, _cluster/stats, _nodes nebo _nodes/stats.
Přestože je primárním způsobem komunikace s Elasticsearch odesíláni JSON dokumentů pomocí REST rozhraní, je možné použít i SQL. Jeho možnosti jsou v Elasticsearch omezené, pokud ale neznáte Elasticsearch query language, může být právě SQL rychlým způsobem, jak s Elasticsearch.
K dispozici je CLI nástroj, který ve staženém Elasticsearch spustíte příkazem:
xxxxxxxxxx/bin/elasticsearch-sql-cli
Následně se spustí konzole, do které je možné SQL příkazy zadávat.
V rámci Kibany je nutné SQL příkaz zabalit do JSON dokumentu:
xxxxxxxxxxPOST /_sql?format=txt{ "query": "SELECT timestamp, url, clientip FROM kibana_sample_data_logs ORDER BY timestamp DESC LIMIT 5"}Při použití formátu txt se tento výsledek vyhledávání ve vzorových datech zobrazí v tabulce:

Podpora SQL umožňuje Elasticsearch napojit (pomocí JDBC respektive ODBC knihovny) na další nástroje, například MS Excel nebo Tableau. Dá se také využít k učení se Elasticsearch query language. Každý SQL dotaz je totiž interně transformován na Elasticsearch query a tu si můžeme nechat zobrazit:
xxxxxxxxxxPOST /_sql/translate{ "query": "SELECT timestamp, url, clientip FROM kibana_sample_data_logs ORDER BY timestamp DESC LIMIT 5"}Použití SQL má však své limity, především je použitelné jen pro získávání dat, ne pro jejich změnu. Dále je problematické použití s některými datovými typy, především s vnořenými objekty a poli.
Nový dokument do Elasticsearch uložíme následujícím příkazem:
xxxxxxxxxxPUT user/_doc/1{ "name": "Oliver Johnson"}V tomto requestu user značí název indexu, do kterého bude dokument uložen, 1 je jednoznačný identifikátor dokumentu a {"name": "Oliver Johnson"} je samotný dokument.
Všimněte si, že jsme nikde nedefinovaly, jaká pole bude dokument obsahovat. To je rozdíl oproti RDBMS, kde je nutné všechny sloupce tabulky předem definovat. V Elasticsearch můžeme rovnou dokument vytvořit, není třeba předem definovat, jaké pole bude obsahovat.
Pokud bychom tento dokument uložili znovu, původní se celý přepíše. Pokud neznáme ID, můžeme nechat Elasticsearch vygenerovat UUID, které dokumentu přidělí, pak také nikdy nedojde k přepsání stávajícího dokumentu:
xxxxxxxxxxPOST user/_doc{ "name": "James Williams"}Druhý přístup se v praxi využívá u dat, kderá už zpravidla nebude třeba nijak modifikovat, nebo ID vůbec nevíme - například u logů. V Kibaně se v tomto případě setkáte s pojmenováním Data Streams. Používat ID má naopak smysl například při ukládání produktů nebo zákazníků.
V případě, že by dosud index user neexistoval, automaticky se vytvoří. A pokud existuje šablona odpovídající názvu nového indexu, převezme z ní nově vytvářený index nastavení.
Po vytvoření dokumentu obdržíme response, která obsahuje výsledek, zda se dokument podařilo uložit, do jakého indexu a s jakým ID. Zároveň je vidět jeho verze, tedy zda došlo k prvnímu uložení dokumentu s daným ID, nějakému dalšímu.

Pokud známe index a ID dokumentu, je možné jej dohledat pomocí příkazu:
xxxxxxxxxxGET user/_doc/1
V response je dokument dostupný pod klíčem _source:

Přestože jsou dokumenty v Elasticsearch vyhledatelné až po nějaké době (standardně 1s), pro request s ID platí, že je dokument dostupný ihned.
Pokud chcete získat dokument přesně tak, jak byl uložen (obsah klíče _source), je to možné dotazem:
xxxxxxxxxxGET user/_source/1
Pro zobrazení všech dokumentů v indexu slouží následující dotaz:
xxxxxxxxxxGET user/_search
Je možné název indexu kompletně vynechat, pak se bude vyhledávat ve všech indexech v clusteru. V názvu indexu je také možné použít *, což značí libovolné znaky. Pokud bychom chtěli vyhledat ve všech indexech začínajících písmenem u, vypadalo by to následovně:

Tento endpoint budeme používat pro vyhledávání. Narozdíl od získání dokumentu dle ID obsahuje response více informací:
took: doba vykonání requestu v ms
timed_out: příznak, zda se stihl request vykonat
_shards: počty shradů, na kterých byl request vykonán
hits: výsledek vyhledávání, který dále obsahuje:
hits.total: Celkový počet nalezených výsledků (maximálně 10.000)
hits.max_score: Skóre nejrelevantnějšího výsledku
hits.hits: Nalezené dokumenty (ve výchozím stavu prvních 10)
Počet nalezených dokumentů v hits.hits je ve výchozím stavu omezen na 10 záznamů. Počet v hits.total odpovídá celkovému počtu dokumentů, které odpovídají dotazu, což nemusí odpovídat počtu dokumentů v hits.hits.
Maximální počet nalezených záznamů v hits.total je z výkonostních důvodů omezen na 10.000. Pokud je v indexu více dokumentů a chceme znát přesný počet nalezených záznamů, je třeba upravit vyhledávací dotaz:
xxxxxxxxxxGET user/_search{ "track_total_hits": true}
Nejjednodušším způsobem modifikace dokumentu je jeho nahrazení novější verzí. Je k tomu nutné ukládat dokument se shodným ID:
xxxxxxxxxxPUT user/_doc/3{ "name": "Patricia Williams"}
PUT user/_doc/3{ "name": "Jennifer Miller"}
GET user/_doc/3# "name": "Jennifer Miller"Je však možné i aktualizovat pouze konkrétní pole dokumentu. Nejprve vytvoříme nový dokument:
xxxxxxxxxxPUT user/_doc/4{ "name": "John Jones", "age": 27}Pokud bychom chtěli nyní změnit pouze věk uživatele s ID 4, bylo by to možné takto:
xxxxxxxxxxPOST user/_update/4{ "doc": { "age": 32 }}
Pomocí endpointu _update je možné vytvořit nebo upravit pole existujícího dokumentu.
Pokud potřebujete k aktualizaci dokumentu využít stávající hodnoty (například zvýšení věku uživatele o 2), bute nutné využít skript:
xxxxxxxxxxPOST user/_update/4{"script" : "ctx._source.age += 2"}
Samotný skript využívá jazyk painless, který poskytuje proměnné, podmínky nebo cykly. Stávající hodnoty dokumentu jsou dostupné pod ctx._source.
Dokument se maže uvedením stejné URL, jako kdybychom chtěli přidat nový dokument podle ID, pouze se použije HTTP metoda DELETE:
xxxxxxxxxxDELETE user/_doc/1
Vytvořte následující dokumenty v indexu subscription_list:
xxxxxxxxxx{ "name": "First customer", "e-mail": "first-customer@icloud.com", "age": 31}xxxxxxxxxx{ "name": "Second customer", "e-mail": "second-customer@gmail.com", "age": 47}vypište všechny dokumenty v indexu subscription_list

Změňte e-mailovou adresu prvního zákazníka na first@outlook.com a zobrazte výsledek:

Smažte druhého zákazníka a znovu vypiště všechny dokumenty v indexu subscription_list:
