## Návod na prácu s Elasticsearch ### Inštalácia ES je dostupný na všetky operačné systémy ako Windows, MacOs aj Linux. Pre prácu bol zvolený operačný systém Linux, ktorý je vhodnejší ako Windows. V systéme sme vytvorili adresár, ktorý bude obsahovať všetky potrebné súčasti. Do tohto adresára sme si stiahli ES, ktorý stačilo rozbaliť a je pripravený na použitie aj bez inštalácie. Pre spustením je potrebné mať prostredie Java Runtime Environment vo verzii aspoň 1.8 Na tejto stránke najdeme najnosvsiu verziu ES [Návod na instalaciu ES - oficialna stranka](https://www.elastic.co/guide/en/elasticsearch/reference/current/deb.html) **Zopár prikazov na lepsie fungovanie ES** sudo -i service elasticsearch start //start ES sudo -i service elasticsearch stop //stop ES **Ak chceme aby sa ES spustal automaticky po spusteni OS** sudo /bin/systemctl daemon-reload sudo /bin/systemctl enable elasticsearch.service **potom vieme ES spustat takto** sudo systemctl start elasticsearch.service sudo systemctl stop elasticsearch.service **alebo zistime v akom stave sa nachadza** sudo service elasticsearch status ### Podpora slovenčiny Pre použitie Hunspell token filtru, stačí jeho obsah stiahnuť z webovej stránky a rozbaliť ho. Po rozbalení obsahu je potrebné otvoriť adresár kde máme nainštalovaný ES. Konkrétne v adresári config vytvoríme nový adresár s názvom hunspell, v ňom ďalej vytvoríme adresár sk_SK. Do tohto adresára nakopírujeme súbory, ktoré sme získali rozbalením Hunspellu. Výsledná súborová štruktúru si môžeme pozrieť na obrázku : ![Súborová štruktúra Hunspell](suborova_struktura.PNG) Pre správne fungovanie už potrebujeme len nastaviť analyzér správne. Dôležité je poradie v akom sa filtre budú aplikovať na text. Na obrázku si môžeme pozrieť kompletné nastavenie analyzéru(pozn. ES musí byť spustený). Ak je všetko správne ES nám odpovie hláškou "true". Ako definovať analyzér si môžeme pozrieť na obrázku : ![Definícia analýzeru](def_analyzeru.PNG) ### Mapping Po nastavení analyzéra potrebujeme ešte pred samotným indexovaním dát nastaviť mapping. Je dôležité nastaviť to na začiatku, kedže mapping už potom nie je možné upraviť. Bolo by potrebné zmazať celý index a nastaviť mapping znova. Pri mappingu potrebujeme vedieť, že každý článok bude obsahovať svoje jedinečné ID, názov(title) a telo(body) článku. Týmto poliam musíme definovať štruktúru, čiže ID bude typu integer, polia title a body budú typu text. ### Indexovanie dát Na indexovanie použijeme pripravený zdrojový kód s názvom elasticsearch.js. Na spustenie javascript kód potrebujeme mať nainštalovaný program Nodejs, najlepšie v čo najnovšej verzii. Kód spustíme pomocou príkazového riadka zadaním príkazu: nodejs elasticsearch.js. Zdrojový kód načítava súbor, v ktorom sú všetky novinové články vo formáte JSON, kde jeden riadok je jeden JSON, čiže jeden novinový článok. Načítavanie prebieha po riadkoch, kde každému riadku je priradený index postupne v rozsahu 1 až 4781. každý článok obsahuje jedinečné ID, názov a telo. Po spustení kódu sa nám zobrazí hláška, ktorá nás informuje o počte indexovaných článkov a vytvorí index s názvom "skweb", kde sa indexuje 4781 novinových článkov, ktorým budú priradené ID. Po úspešnom indexovaní môžeme začať dáta vyhľadávať. Ukážka správneho indexovania je na obrázku : ![Ukážka indexovania](ukazka_indexovania.PNG) ### Vyhľadávanie Po úspešnom indexovaní môžeme začať s vyhľadávaním. Musíme si pripraviť dotaz pre ES. Obrázok znázorňuje komunikáciu s ES a vyhľadávanie pomocou neho. Odpoveď ES si môžeme pozrieť na obrázku. Sú tam zobrazené informácie o trvaní vyhľadávania v ms, počte nájdených dokumentov, indexe, v ktorom sa nachádza nájdený dokument, type, v ktorom je uložený dokument a ID dokumentu. ![Vyhľadávanie](vyhladavanie.PNG) ![Odpoveď]( odpoved.PNG) ### Výpočet presnosti Použijeme metódu precision-recall. V priečinku ../scnc21 sa nachádza súbor answers, ktorý obsahuje ID všetkých relevantných článkov pre každú otázku. Pri vyhľadávaní majú články ID v rozsahu 1-4871. V súbore answers majú články ID dokumentov označené inými číslami. Preto je potrebné každému ID z nášho vyhľadávača priradiť ID zo súboru answers aby sme správne vedeli vypočítať presnosť. Keďže naše indexovanie článkov prebiehalo načítavaním po riadkoch tak ID dokumentu, ktorý nám našiel vyhľadávač je vlastne číslo riadku, pomocou ktorého sme indexovali dáta. Stačí si pozrieť súbor info.txt , pomocou ktorého vieme prideliť správne ID. Potom nám stačí použiť nástroj na výpočet precision-recall, môžeme to byť npm balíček precision-recall alebo online kalkulátor. Ak vypočítame presnosť pre každú otázku na záver stačí vypočítať aritmetický priemer všetkých otázok. **Všetky potrebné zdrojové súbory su priložené v tomto repozitári** **Môžu nastať menšie rozdiely kvôli novším verziám použitých nástrojov napr. ES, Nodejs** **Užitočné odkazy** : Dáta na indexovanie k stiahnutiu, články zo slovenského internetu: https://nlp.web.tuke.sk/static/files/scnc1.zip Súbory potrebné na výpočet presnosti, konkrétne otázky a a súbor správnych odpovedí: https://nlp.web.tuke.sk/static/files/scnc21.zip Všetko doležité ohľadom ES je na ich oficiálnej stránke : https://www.elastic.co/elasticsearch/ Dôležité veci ohľadom Nodejs nájdete tu : https://nodejs.org/en/blog/ Pre viac informácií stači pozrieť bakalársku prácu : https://opac.crzp.sk/?fn=detailBiblioForm&sid=A4CA3C451D400D4BD034603141D1&seo=CRZP-detail-kniha