Fulltextové vyhledávání

Fulltextové vyhledávání je speciální způsob prohledávání databáze, který vede k větší relevanci výsledků, které jsou zároveň získány mnohem rychleji než při klasickém způsobu vyhledávání a to i při velkých objemech databáze. Lze tedy říci, že čím více záznamů v databázi existuje, tím více se projeví rychlost fulltextu. Pro srovnání stačí uvést, že pokud vyhledáváte v databázi mezi padesáti tisíci objednávek ty, ve kterých je např. zboží určité značky, pak zatímco klasický způsob vyhledávání se počítá na vteřiny, fulltext to zvládne za zlomky vteřiny.

ContOS fulltextové vyhledávání podporuje ve všech hlavních seznamech jako jsou adresář, zboží, smlouvy a další doklady.

Je dokonce možné do fulltextového vyhledávání zahrnout či naopak vyřadit určitá prohledávací pole, např. v adresáři můžeme chtít vyhledávat nejen podle jména a příjmení, ale i podle čísla dokladu, kdežto v objednávkách nás bude z hlediska prohledávaných údajů zákazníka zajímat pouze jméno a příjmení.

Fulltextové vyhledávání v ContOSu využívá speciální doplněk databázového serveru MS SQL Server, který musí být nainstalovaný, aby bylo možné tuto vyhledávací technologii použít.

Nastavení fulltextu

Pro správné fungování vyhledávání je potřeba provést nastavení v aplikaci. Podporuje-li vaše databáze fulltext, bude v nastavení aplikace k dispozici záložka "Fulltext".

Obr. 1 - Nastavení parametrů fulltextového vyhledávání.

Obr. 1 - Nastavení parametrů fulltextového vyhledávání.

Na kartě Fulltext je nejprve nutné aktivovat fulltext pomocí zaškrtávacího políčka "Zapnout databázový Fulltext".

Poté je vhodné zkontrolovat a popř. upřesnit, která pole chcete v konkrétních modulech (agendách) prohledávat. Pole, která nejsou zaškrtlá se prohledávat nebudou žádným způsobem. Pokud byste např. zrušili zaškrtnutí polí příjmení v Adresáři, pak by vyhledávání dle příjmení nevrátilo žádný výsledek.

Na této kartě ještě existuje sekce "Prohledávat zprava i tyto údaje". Fulltext standardně vyhledává celá slova a bere v úvahu znaky zleva. V praxi je však často výhodné některé typy položek prohledávat zprava, např. číslo dokladu: pokud je ve tvaru 6000145, je praktičtější zadat do vyhledávání "145", než opisovat celé dlouhé číslo. A právě pro tyto případy tato volby slouží.

Příklady použití

Na první pohled se na seznamech zapnutí fulltextového vyhledávání neprojeví. Je tam stále stejné vstupní vyhledávací pole.

Obr. 2 - Vyhledávání v seznamu.

Obr. 2 - Vyhledávání v seznamu.

Uveďme si příklady vyhledávání na Adresáři. V nastavení fulltextu máme uvedeno, že chceme prohledávat vždy pouze pole číslo zákazníka, jméno, název firmy a e-mail. Zároveň jsme si povolili, že číslo zákazníka můžeme vyhledávat i zprava.

Vyhledávání jednoduchých výrazů

Zadáme-li do vyhledávacího pole slovo "novotná", zobrazí se nám všichni klienti s příjmením Novotná. Není bezpodmínečně nutné psát celé příjmení, vyhledávání bude fungovat i po zadání jen části příjmení, avšak pozor - vždy píšeme od začátku, tedy např. "novot" (zobrazí každou Novotnou, Novotného i Novotu), nikoli zprostředka nebo od konce - "ovot" nám pravděpodobně nevrátí nikoho, protože žádné příjmení na "Ovot" nezačíná.

Jiná situace nastane, hledáme-li zákaznické číslo a do vyhledávání zadáme číslo "2042". Vyhledá nám to klienty s čísly, která končí na 2042, tedy např. "K32042" a také "K02042". Můžeme také zadat celé zákaznické číslo "K02042" a to už se najde pouze jeden jediný záznam (zákaznické číslo je jedinečné).

Vyhledávání podle spojených výrazů

Dále můžeme vyhledávat pomocí složitějších podmínek. Např. chceme najít všechny zákazníky, kteří mají příjmení Novotný a zároveň jejich křestní jméno začíná na "Ja". Takový výraz zapíšeme do vyhledávacího pole jako slova oddělená čárkou: "Novotný,Ja". Výsledkem budou všichni Janové, Jaroslavové i Jaromírové Novotní. Pokud bychom do hledání zadali "Novotn,Ja", pak se vyhledají také všechny Jany Novotné i Jaroslavy Novotné. 

Je nutno podotknout, že při vyhledávání se nerozlišují velká a malá písmena ani diakritika, tzn., že stejného výsledku docílíme jak s "Novotný", tak i s "novotny".

Znak čárka (,) ve vyhledávacím poli znamená, že hledaný záznam musí obsahovat oba výrazy.
Znak středník (;) ve vyhledávacím poli znamená, že hledaný záznam může obsahovat alespoň jeden z výrazů.

Jiná situace nastává, když potřebujeme vyhledat všechny Novotné a zároveň také všechny Nováky. Pak ve vyhledávání použijeme středník (;), tedy "Novotný;Novák". Výsledkem budou všichni zákazníci, kteří se jmenují Novotný, Novák nebo také Nováková.

Obr. 3 - Vyhledávání podle spojených výrazů.

Obr. 3 - Vyhledávání podle spojených výrazů.

Vysvětlení oddělovačů v textu a logiky vyhledávání

Jak již bylo zmíněno v úvodu, fulltextové vyhledávání se liší od vyhledávání klasického. Je násobně rychlejší a to zejména čím objemnější data prohledáváme a přináší přesnější výsledky. Na druhou stranu jeho teoretickou slabinou je, že umí slova prohledávat pouze zleva. Tato slabina je však pouze teoretická, z pohledu relevance výsledků, tak jak je nám blízká, většinou preferujeme vyhledávání od začátku slov. 

Tedy vždy hledáme zákazníky, jejichž jméno začíná na určitá písmena - hledáme ty, jejichž jméno začíná na "Novák" než ty, jejichž jméno obsahuje "ová". Stejně tak např. u telefonních čísel - hledáme podle celého telefonního čísla, protože výsledek všech kontaktů jen podle podmínky, že jejich telefonní číslo obsahuje hodnotu "56" je nezajímavý.

Jiný případ je e-mailová adresa. Buď hledáme někoho s konkrétní adresou, tedy např. "novak@seznam.cz" anebo chceme najít všechny zákazníky, kteří mají e-mail s koncovkou "seznam.cz". Anebo všechny, jejichž adresa obsahuje jméno "Jan". Tyto případy umí fulltext dokonale: stačí do vyhledávacího pole napsat jedno z výše uvedených slov a ve zlomku vteřiny budou zobrazeny všechny odpovídající záznamy.

Jak již bylo řečeno výše, v praxi se tomuto přístupu vymyká hledání podle čísel dokladů nebo podle zákaznických čísel. Tato čísla jsou většinou dlouhá a zpravidla obsahují různé prefixy či vodící nuly, které se nám nechce opisovat a tak se spíše vyhledává podle koncových čísel. Jednodušší je tedy zadat hledané číslo faktury jako "1548" než-li "DD60001548". V praxi ani tolik nevadí, že se může vrátit několik málo záznamů navíc, protože ten konkrétní už rychle dohledáme "podle oka".

Tento způsob vyhledávání "zprava" u těchto specifických polí můžeme nastavit v parametrech aplikace.

Na počátku je vhodné si na několika příkladech funkci vyhledávání vyzkoušet, a tím nejlépe pochopíme, jak rutinně vyhledávat v datech a velmi si tak ušetřit práci a čas.