Fulltextové hledání - obecně

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

Princip fulltextového hledání

Princip fulltextového hledání spočívá ve vytvoření množiny slov z vybraných položek požadované agendy. Tato slova se umístí do nové tabulky v databázi začínající prefixem FS$. Při založení nebo změně definice se slovům v tabulce musí ručně pomocí funkce Aktualizovat napočítat tzv. indexy, díky kterým je pak umožněno rychlé hledání. Po prvním ručním napočítání indexů dochází pak při každém uložení záznamu v patřičné agendě k indexaci záznamů automaticky.

Slova jsou vždy při ukládání tabulky převedeny do velkých písmen a při vyhledávání se hledaný textový řetězec taktéž převádí na velká písmena. Jejich velikost tudíž nehraje roli. Při ukládání se odstraňuje veškerá diakritika (např. "převodka" bude uloženo jako "PREVODKA" atp.) a při hledání slov ji tedy není třeba zadávat. Slovem se rozumí textový řetězec, jehož délku a hranice je možné uživatelsky ovlivnit v detailu definice hledání. V implicitním nastavení a při inteligentním dělení slov je jím nicméně míněn řetězec od 0 do 100 znaků, ze kterého se odstraní interpunkční znaménka a který zohledňuje (tj. nedělí) některé užívané řetězcové konvence (emailová adresa, internetová adresa, číslo dokladu).

Při vyhledávání pak platí, že že interně je při fulltextovém hledání zapnuta tzv. rozšířená syntaxe. Hledání však ruší nutnost (nikoli možnost, viz níže) hvězdičkové konvence a systém dohledá záznam při zadání jakéhokoli úseku slova uloženého v tabulce. Pokud je tedy v tabulce uloženo slovo firma, bude záznam s tímto slovem dohledán, když budou do výrazu pro hledání zadány řetězce fir, rm, irma či i atp.

U uvozovek platí, že vyhledávaný text uzavřený do uvozovek bude hledán přesně. Zároveň s uvozovkami (ale pouze s nimi!) je možné kombinovat i symbol hvězdičky:

Hledaný řetězec Výsledek
top ten Hledá se "%top% AND "%ten%". Tedy např. aaatopaaa bbbtenbbb.
"top" "ten" Hledá se "top" AND "ten". Tedy přesně top ten.
"top" ten Hledá se "top" AND "%ten%". Tedy např. top bbbtenbbb.
"top*" ten Hledá se "top%" AND "%ten%". Tedy např. topaaa bbbtenbbb.

Znak % odpovídá v databázi znaku hvězdičky. AND je logický operátor pro "a zároveň".

Lze tedy také využívat logické operátory AND, OR a NOT, stejně jako v rozšíření syntaxi.

Co se týče znaků + a -, tak pokud je + a - uprostřed zadaného slova, zachová se. Pokud je na začátku, zachová se taky, ale ve smyslu speciálního znaku - tedy zahrnout nebo nezahrnout do hledání. Pokud chceme hledat slovo, které začíná na + nebo -, je třeba ho odsadit escape znakem, tedy \+slovo nebo \-slovo. Pozor však, jakým způsobem je prováděno ukládání fulltext výrazů - pokud je nastaveno Dělení slov jako Inteligentní anebo Vlastní tak se takové slovo nemusí uložit ve fulltextovém slovníku tak, jak se očekává. Operátory závorek není možné použít.

Zpět na obsah

Vytvoření definice fulltextového hledání

Aby bylo možné fulltextové hledání v dané agendě používat, je nutné mít pro tuto agendu vytvořenou definici fulltextového hledání. To je možné těmito způsoby:

Zpět na obsah

Příklady definicí a výsledky hledání

Pro pochopení fungování fulltextového hledání nabízíme dva typové příklady:

Příklad 1: V agendě Číselník firem mějme založené tři firmy s názvy AAA, XY a Česká automobilka a.s. V agendě Fulltextové hledání vytvořme nový záznam, navažme jej na agendu Číselník firem, pomocnou db. tabulku ponechme s názvem Firms (v databázi tak vznikne tabulka s názvem FS$FIRMS). Dále založme tyto řádky: v položce název zadejme Název, v položce dělení nastavme Inteligentní, min. délku slova nastavme na 3, max. délku slova na 8, v položce výraz vyberme datovou položku Name (Název) a definici uložme. Následně vyvolejme nad uloženým záznamem funkci Aktualizovat.

Pokud se nyní přepneme do agendy Číselník firem a do výrazu v panelu fulltextového hledání zadáme XY a stisknutím enteru provedeme dotaz, tak systém nic nenajde, neboť jsme v definici omezili min. délku slova na 3 znaky. Stejně tak i při pokusu o hledání slova automobilka bude výpis prázdný, neboť maximální délka slova byla nastavena na 8 znaků (a v tabulce je tedy uloženo slovo automobi, neboť systém slova ořezáva na zadaný počet znaků zleva). Úspěšné výsledky tedy získáme u řetězců AAA, česká či automobi.

Z toho vyplývá, že při určování minimální a maximální délky slov musíme dbát na to, aby se do tabulky dostaly skutečně všechny řetězce a tedy vymezené hranice nebyly příliš restriktivní. V našem případě by tedy ideální nastavení bylo minimální délka slova 2 (aby se do tabulky dostal i název firmy XY) a maximální délka slova 10 (aby se do tabulky dostalo celé slovo spořitelna). Pokud se slova dělí, pak je obvykle maximální délka slova nastavena na nejdelší očekávatelné slovo, které se v poli vyskytne nebo bude vyskytovat. Je dobré počítat s určitými rezervami.

Příklad 2: 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 FS$ISSUEDINVOICES). Dále založme jeden řádek takto: v položce název zadejme Číslo dokladu, v položce dělení nastavme Inteligentní, min. délku slova nastavme na 3, max. délku slova na 20, v položce výraz vyberme datovou položku Displayname (Číslo dokladu) a definici uložme. Následně vyvolejme nad uloženým záznamem funkci Aktualizovat.

Pokud se nyní přepneme do agendy Faktury vydané a do výrazu v panelu fulltextového hledání zadáme FV a stisknutím enteru provedeme dotaz, tak systém zobrazí všechny tři faktury. Pokud do výrazu zadáme 2012, tak systém zobrazí pouze faktury z roku 2012. Pokud zadáme FV-2/2012, tak systém zobrazí právě tuto fakturu. Inteligentní dělení v definici fulltextového hledání totiž za slovo považuje řetězce, které obsahují i znaky "-" a "/" a do databáze jsou tudíž uloženy v celku.

Zpět na obsah

Logování

Fulltextové hledání je také možné logovat zadáním patřičných sekcí do souboru Nexus.cfg do samostatného souboru a to přes třídu FastSearch. Například takto:

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

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

Zpět na obsah