-
Elasticsearch = systém pro fulltextové vyhledávání
-
založen na Apache Lucene, používá strukturu Skip list
-
Elasticsearch komunikuje pomocí REST (representational state transfer)
- Pro komunikaci se serverem lze použít libovolého REST klienta.
- Např. curl, rozšíření REST Client do VS Code, …
- Pro komunikaci se serverem lze použít libovolého REST klienta.
Rozdělení textu na termy (Tokenizace)
- V Elasticsearch se indexace dokumentů skládá z několika kroků, ve kterých je text rozdělen na menší části nazývané “termy” nebo “tokeny”.
- Proces tokenizace:
- Analýza: Text je zpracován analyzátorem. To je kombinace tokenizeru a filterů
- Tokenizer: rozděluje text na tokeny, obvykle na základě mezery a interpunkce.
- Token filtr: modifikuje tokeny, například převádění na malá písmena, odstranění stop slov, synonyma, atd.
- Například řetězec
"The Hobbit, or There and Back Again"
se přeloží na termy:"the"
,"hobbit"
,"or"
,"there"
,"and"
,"back"
,"again"
.
- Indexace (Indexing): Tokeny jsou poté přidány do invertovaného indexu, který mapuje termíny na místa jejich výskytu v dokumentech.
- Analýza: Text je zpracován analyzátorem. To je kombinace tokenizeru a filterů
Základní dotazy
- Dotazy jsou vyjádřeny pomocí JSON.
Požadavek
- Požadavek na dotaz indexu má tvar:
POST /index/_search
{
"query": query
}
- kde
query
je objekt popisující dotaz
Příklad požadavku
{ "query": { "term": { "status": "active" } } }
Odpověď
- Tělo odpovědi obsahuje:
{
"hits": {
"total": {
"value": hits_count,
},
"hits": hits
}
}
-
kde
hits_count
je počet zásahů ahits
je pole zásahů. -
Zásah obsahuje:
{
"_id": document_id
"_source": document
}
- kde
document
je zasažený dokument adocument_id
jeho identifikátor.
match query
- Hledá dokumenty, které odpovídají poskytnutému textu.
- Dotaz
match_all
zasáhne každý dokument:
{
"match_all": { }
}
- Dotaz
match
zasáhne dokumenty, které mají v položcename
hodnotu vyhovující predikátuvalue_query
.
{
"match": {
name: value_query
}
}
- Konkrétní příklad:
{
"query": {
"match": {
"title": {
"query": "THE, HoBBit"
}
}
}
}
-
V tomto řetězci je
"THE, HoBBit"
rozložen na termy:"the"
,"hobbit"
. -
Dokument je zasažen, pokud se aspoň jeden term dotazu shoduje s termem položky.
-
Pokud chceme, aby položka obsahovala všechny uvedené termy, použijeme predikát:
{
"query": query_string,
"operator": "AND"
}
Navigace
Předchozí: Základy práce v MongoDB - operátory v dotazech, implicitní operátory a dotazy na vnořené dokumenty Následující: Výpočet skóre zásahu Celý okruh: 2. Informační technologie