Fulltextové hľadanie - všeobecne

Fulltextové hledání je jednou z možností hledání v systému ABRA Gen ve většině číselníkových a dokladových agend, kde je k dispozici Panel fulltextového hledání.

Princíp fulltextového hľadania

Princíp fulltextového hľadania spočíva vo vytvorení množiny slov z vybraných položiek požadovanej agendy. Tato slova se umístí do nové tabulky v databázi začínající prefixem FSU$.

Před zavedením podpory Unicode pro fulltextové hledání v systému ABRA Gen se pro tabulky (jejichž kódování bylo ANSI) používal název prefixu FS$. Po zavedení Unicode se tabulky nově vytvářejí s prefixem FSU$, díky čemuž je možné rozlišit tabulky se starým a novým kódováním mezi sebou. K tabulkám fulltextového hledání dříve vytvořeným v ANSI je možné dogenerovat tabulky s prefixem FSU$ v Unicode pomocí funkce Převést na unicode. Staré tabulky v ANSI s prefixem FS$ v systému zůstanou, ale budou již zbytečné, nebudou se používat. Tyto již zbytečné tabulky je možné následně odstranit pomocí funkce Aktualizovat.

Pri založení alebo zmene definície sa slovám v tabuľke musí ručne pomocou funkcie Aktualizovať napočítať tzv. indexy, vďaka ktorým je tak umožnené rýchle hľadanie. Po prvom ručnom napočítaní indexov potom dochádza pri každom uložení záznamu v patričnej agende k indexácii záznamov automaticky.

Fultextové hledání nad databází ORACLE probíhá jak ve FSU$ tabulkách, tak k nim přidělených synonymech. Je to preto, že ak by boli tieto tabuľky zahrnuté do zdieľania číselníkov (teda v "slave" spojenia tabuľka nie je a je tam namiesto nej synonymum), tak by fulltext nebolo možné použiť.

Slová sú vždy pri ukladaní tabuľky prevedené do veľkých písmen a pri vyhľadávaní sa hľadaný textový reťazec tiež prevádza na veľké písmena. Ich veľkosť teda nehrá rolu. Pri ukladaní sa odstraňuje kompletná diakritika (napr. "prevodka" bude uložené ako "PREVODKA" a pod.) a pri hľadaní slov ju teda nie je potrebné zadávať. Slovom sa rozumie textový reťazec, ktorého diaľku a hranice je možné užívateľsky ovplyvniť v detaile definície hľadania. V implicitnom nastavení a pri inteligentnom delení slov je ním však myslený reťazec od 0 do 100 znakov, z ktorého sa odstránia interpunkčné znamienka a ktorý zohľadňuje (tzn. nedelí) niektoré užívané reťazcové konvencie (emailová adresa, internetová adresa, číslo dokladu).

Pri vyhľadávaní potom platí, že interne je pri fulltextovom hľadaní zapnutá tzv. rozšírená syntax. Hľadanie však ruší nutnosť (nie možnosť, viď nižšie) hviezdičkovej konvencie a systém dohľadá záznam pri zadaní akéhokoľvek úseku slova uloženého v tabuľke. Ak je teda v tabuľke uložené slovo firma, bude záznam s týmto slovom vyhľadaný, keď budú do výrazu pre hľadanie zadané reťazce fir, rm, irma či i a pod.

Pri úvodzovkách platí, že vyhľadávaný text uzavretý do úvodzoviek bude hľadaný presne. Zároveň s úvodzovkami (ale len s nimi!) je možné kombinovať i symbol hviezdičky:

Hľadaný reťazec Výsledok
top ten Hľadá sa "%top% AND "%ten%". Teda napr. aaatopaaa bbbtenbbb.
"top" "ten" Hľadá sa "top" AND "ten". Teda presne top ten.
"top" ten Hľadá sa "top" AND "%ten%". Teda napr. top bbbtenbbb.
"top*" ten Hľadá sa "top%" AND "%ten%". Teda napr. topaaa bbbtenbbb.

Znak % zodpovedá v databáze znaku hviezdičky. AND je logický operátor pre "a zároveň".

Je teda možné využívať logické operátory AND, OR a NOT, rovnako ako v rozšírení syntaxe.

Čo sa týka znakov + a -, tak pokiaľ je + a - uprostred zadaného slova, zachová sa. Pokiaľ je na začiatku, zachová sa tiež, ale v zmysle špeciálneho znaku - teda zahrnúť alebo nezahrnúť do hľadania. Pokiaľ chceme hľadať slovo, ktoré začína na + nebo -, je potrebné ho odsadiť escape znakom, teda \+slovo alebo \-slovo. Pozor však, akým spôsobom je vykonávané ukladanie fulltext výrazov - pokiaľ je nastavené Delenie slov ako Inteligentné alebo Vlastné tak sa také slovo nemusí uložiť vo fulltextovom slovníku tak, ako sa očakáva. Operátory zátvoriek nie je možné použiť.

Späť na obsah

Vytvorenie definície fulltextového hľadania

Aby bolo možné fulltextové hľadanie v danej agende používať, je nutné mať pre túto agendu vytvorenú definíciu fulltextového hľadania. To je možné týmito spôsobmi:

Späť na obsah

Príklady definícií a výsledky hľadaní

Pre pochopenie fungovania fulltextového hľadania ponúkame dva typové príklady:

V agende Adresár firiem majme založené tri firmy s názvami AAA, XY a Česká automobilka a.s. V agendě Fulltextové hledání vytvořme nový záznam, navažme jej na agendu Adresář firem, pomocnou db. tabulku ponechme s názvem Firms (v databázi tak vznikne tabulka s názvem FSU$FIRMS). Ďalej založme jeden riadok takto: v položke názov zadajme Názov, v položke delenie nastavme Inteligentné, min. dĺžku slova nastavme na 3, max. dĺžku slova na 8, v položke výraz vyberme dátovú položku Displayname (Číslo dokladu) a definíciu uložme. Následne vyvolajme nad uloženým záznamom funkciu Aktualizovať.

Ak sa teraz prepneme do agendy Adresár firiem a do výrazu v paneli fulltextového hľadania zadáme XY a stlačením enter vykonáme dopyt, tak systém nič nenájde, pretože sme v definícii obmedzili min. dĺžku slova na 3 znaky. Rovnako tak aj pri pokuse o hľadanie slova automobilka bude výpis prázdny, pretože maximálna dĺžka slova bola nastavená na 8 znakov (a v tabuľke je teda uložené slovo automobil, pretože systém slová orezáva na zadaný počet znakov zľava). Úspešné výsledky teda získame u reťazcov AAA, česká či automobi.

Z toho vyplýva, že pri určovaní minimálnej a maximálnej dĺžky slov musíme dbať na to, aby sa do tabuľky dostali skutočne všetky reťazce a teda vymedzené hranice neboli príliš reštriktívne. V našom prípade by teda ideálne nastavenie bolo minimálna dĺžka slova 2 (aby sa do tabuľky dostal i názov firmy XY) a maximálna dĺžka slova 10 (aby sa do tabuľky dostalo celé slovo sporiteľňa). Ak sa slová delia, tak je obvykle maximálna dĺžka slova nastavená na najdlhšie očakávateľné slovo, ktoré sa v poli vyskytne alebo bude vyskytovať. Je dobré počítať s určitými rezervami.

V agendě Faktury vydané mějme založené tři faktury s čísly dokladu FV-1/2011, FV-1/2012 a FV-2/2012. V agendě Fulltextové hledání vytvořme nový záznam navažme jej na agendu Faktury vydané, pomocnou db. tabulku ponechme s názvem IssuedInvoices (v databázi tak vznikne tabulka s názvem FSU$ISSUEDINVOICES). Ďalej založme jeden riadok takto: v položke názov zadajme Číslo dokladu, v položke delenie nastavme Inteligentné, min. dĺžku slova nastavme na 3, max. dĺžku slova na 20, v položke výraz vyberme dátovú položku Displayname (Číslo dokladu) a definíciu uložme. Následne vyvolajme nad uloženým záznamom funkciu Aktualizovať.

Ak sa teraz prepneme do agendy Faktúry vydané a do výrazu v paneli fulltextového hľadania zadáme FV a stlačením enter vykonáme dopyt, tak systém zobrazí všetky tri faktúry. Ak do výrazu zadáme 2012, tak systém zobrazí len faktúry z roku 2012. Ak zadáme FV-2/2012, tak systém zobrazí práve túto faktúru. Inteligentné delenie v definícii fulltextového hľadania totiž za slovo považuje reťazce, ktoré obsahujú i znaky "-" a "/" a do databázy sú teda uložené v celku.

Späť na obsah

Logovanie

Fulltextové hľadanie je tiež možné logovať zadaním patričných sekcií do súboru Nexus.cfg do samostatného súboru, a to cez triedu FastSearch. Napríklad takto:

[Logs]
LogsDirectory=C:\Logs
[Log.FastSearch]
Enabled=1
Level=6

Více viz kap. Logování běhu aplikace.

Späť na obsah