|
![]() | Fulltextové systémy - indexování | ![]() | Fulltext v 602SQL | Seznam slov, která se neindexují | ![]() |
Ve fulltextovém systému lze vyhledávat dokumenty obsahující slova, fráze a jejich kombinace vytvořené pomocí operátorů AND, OR, NOT a NEAR, případně i s použitím kulatých závorek. Pro kombinování vyhledávaných slov platí tato pravidla:
elektrárna - hledají se dokumenty obsahující slovo "elektrárna";
uhlí AND elektrárna - hledají se dokumenty obsahující slova "uhlí" a zároveň "elektrárna";
teplárna OR elektrárna - hledají se dokumenty obsahující slova "teplárna" nebo "elektrárna";
elektrárna AND NOT vodní - hledají se dokumenty obsahující slovo "elektrárna", ale neobsahující slovo "vodní";
elektrárna NEAR znečištění - hledají se slova obsahující slovo "elektrárna" vyskytující se poblíž slova "znečištění";
"atomová elektrárna" - hledají se dokumenty obsahující bezprostředně za sebou stojící slova "atomová" a "elektrárna".
Operátor NOT se dá použít pouze na jednotlivá slova. Operátor AND má vyšší prioritu než OR, takže například při vyhledávání
aaa OR bbb AND cccse vrátí také dokument obsahující pouze slovo aaa.
K vyhledání slouží predikát:
Fulltext(označení_ft_systému, sloupec_ID_dokumentu, hledaná_slova)
kde
SELECT * FROM Txtab WHERE Fulltext('Spisovna.Korespondence', cislo_doc, '(Linux OR ''Windows NT'') AND NOT MS-DOS')
vybere z tabulky Txtab ty záznamy, které obsahují ve svých zaindexovaných sloupcích slovo Linux nebo Windows NT a zároveň neobsahují výraz MS-DOS.
V lemmatizovaných fulltextových systémech (obvykle čeština, slovenština) se hledaná slova automaticky převedou na základní tvar, aby se nalezly všechny výskyty. Proto
...WHERE Fulltext('Spisovna.Korespondence', cislo_doc, 'atomová elektrárna') ...WHERE Fulltext('Spisovna.Korespondence', cislo_doc, 'atomový elektrárna') ...WHERE Fulltext('Spisovna.Korespondence', cislo_doc, 'atomové elektrárny')vrátí stejný výsledek.
Fulltextové nástroje ve 602SQL nesledují velikost všech písmen ve slově. Dovolují však rozlišit tři případy:
Při normálním vyhledávání slova se k velikosti písmen nepřihlíží. Pokud se velikost písmen má respektovat (v rámci uvedených tří kategorií), pak je třeba v posledním parametru predikátu Fulltext uvést bezprostředně před příslušným slovem znak = (rovnítko).
most nebo MOST - hledají se dokumenty obsahující slovo "most","Most","MOST" bez ohledu na velikost písmen;
=most - hledají se dokumenty obsahující slovo "most", s malým prvním písmenem (obecné slovo, ne na začátku věty);
=Most - hledají se dokumenty obsahující slovo "Most", s prvním písmenem velkým, avšak nikoli se všemi velkými písmeny (název města, obecné slovo na začátku věty);
=MOST - hledají se dokumenty obsahující slovo "MOST", napsané pouze velkými písmeny (název nevládní organizace).
Fulltext('Spisovna.Korespondence', cislo_doc, 'Německo OR =BRD')
Dotaz v této formě zabrání nalezení dokumentu, který obsahuje slovo "Brd" (genitiv od "Brdy").
Fulltextový systém umožňuje vyhledávat k dané frázi také její kontext (slova před a za frází v původním dokumentu). K vyhledání kontextu slouží funkce Fulltext_get_context s využitím systémové proměnné @@FULLTEXT_POSITION (typu INT).
SELECT Fulltext_get_context('Literary.Correspondence',doc,'TXT',0,@@FULLTEXT_POSITION,1,5,'>>%<<') FROM Doctab WHERE Fulltext('Literary.Correspondence', id, '...')
Fulltextový systém dokáže sledovat počty výskytů hledaného slova nebo fráze v dokumentech. Tyto počty se nejčastěji používají k setřídění nalezených dokumentů. Setříděnou odpověď vytvoří dotaz využívající systémovou proměnnou @@FULLTEXT_WEIGHT v tomto tvaru:
SELECT ...., @@FULLTEXT_WEIGHT FROM ... WHERE Fulltext(...) ORDER BY @@FULLTEXT_WEIGHT
Pokud při vytvoření fulltextového systému bylo umožněno sledování vah jednotlivých výskytů slova v dokumentu, pak se jeden výskyt slova může počítat s násobnou váhou. Rozlišení váhy výskytů však závisí na formátu dokumentu a na schopnosti konverzní knihovny přiřadit slovům v různých částech dokumentu různé váhy.
V současné verzi se rozlišení váhami nepoužívá.
Není dovoleno vyhledávat dokumenty pouze na základě toho, že neobsahují určité slovo či frázi. Nelze například vyhledávat dokumenty neobsahující slovo Windows pomocí predikátu:
Fulltext('Spisovna.Korespondence', cislo_doc, 'NOT Windows')
Klauzule NOT musí být vždy spojena operátorem AND s pozitivním vyhledáváním nějakého slova nebo fráze, např. lze psát:
Fulltext('Spisovna.Korespondence', cislo_doc, '''Operační systém'' AND NOT Windows')
Na negativistický dotaz fulltextový systém vrátí prázdnou odpověď. Klauzule NOT spojená pomocí OR s jinou klauzulí se ignoruje.
Do klientského Vývojového prostředí je zabudován jednoduchý frontend fulltextového systému. Kdykoliv lze jednoduše zadat frázi a vrátí se informace o tom, zda-li je fráze ve fulltextu obsažena, v jaké zdrojové tabulce a v jakém kontextu.
Okno fulltextového frontendu se vyvolá poklepáním (nebo příkazem Spustit z nabídky) na objekt typu Fulltext na Řídicím panelu. Otevře se okno se třemi částmi:
![]() | Fulltextové systémy - indexování | ![]() | Fulltext v 602SQL | Seznam slov, která se neindexují | ![]() |