-
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
queryje 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_countje počet zásahů ahitsje pole zásahů. -
Zásah obsahuje:
{
"_id": document_id
"_source": document
}- kde
documentje zasažený dokument adocument_idjeho identifikátor.
match query
- Hledá dokumenty, které odpovídají poskytnutému textu.
- Dotaz
match_allzasáhne každý dokument:
{
"match_all": { }
}- Dotaz
matchzasáhne dokumenty, které mají v položcenamehodnotu 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