|
Označování a uložení dokumentů | Fulltext v 602SQL | Fulltextové vyhledávání dokumentů |
Automatické zaindexovávání dokumentů zajišťuje, že se při vytváření, rušení a změnách dokumentů ihned upravují fulltextové indexy. Vyhledávání pomocí fulltextových nástrojů pak neustále vychází z aktuální množiny dokumentů.
Automatické zaindexování probíhá podle specifikací tzv. fulltextových triggerů zadaných v popisu fulltextového systému. Změnu automatického zaindexování lze zajistit pomocí příkazu ALTER FULLTEXT.
Každý požadavek na automatické zaindexovávání obsahuje jméno dokumentové tabulky a jména jejích dvou sloupců: sloupce s dokumentem a sloupce s číslem dokumentu. Dále musí obsahovat informaci o způsobu uložení dokumentu (v tabulce, v externím souboru) a může obsahovat informaci o vnitřním formátu dokumentu. Interaktivní práce s definicí fulltextového systému (či případné přeindexování) se provádí z prostředí návrháře fulltextu.
Je-li dokument uložen v externím souboru, pak se o jeho přepsání SQL server nedozví. Pro přeindexování takového dokumentu je třeba buď provést SQL příkaz UPDATE na sloupec s odkazem na tento dokument, anebo zavolat funkci pro manuální zaindexování popsanou níže.
Ukázka definice objektu typu fulltext s fulltextovým triggerem pro automatické indexování:
CREATE FULLTEXT FT_TEST LANGUAGE 0 LEMMATIZED NOT SUBSTRUCTURED (DOCTAB ID_DOC DOC,'TXT')
Při použítí manuálního zaindexovávání dokumentů lze mít pod kontrolou okamžik, v němž se upravují fulltextové indexy. Lze například naplánovat změny v indexech pro všechny změněné dokumenty až na noční hodiny.
Pro explicitní zaindexování konkrétního dokumentu slouží funkce Fulltext_index_doc. Fulltextový systém je třeba v tomto případě vytvořit BEZ fulltextových triggerů (ať příkazem CREATE FULLTEXT nebo z návrháře).
Pokud se dokument nachází v souboru, pak je nutno volat funkci pro zaindexování na tom počítači, na němž je soubor dostupný. Proto SQL procedura prováděná na databázovém serveru obvykle nemůže zaindexovat dokument zacházející se v souboru na klientském počítači. Pro tento případ existuje funkce Fulltext_index_doc také v klientském API.
Pokud je dokument či jeho obsah zrušen, pak je třeba jej odstranit z indexu pomocí funkce SQL Fulltext_remove_doc.
Funkci Fulltext_remove_doc není třeba volat po změně v dokumentu před voláním funkce Fulltext_index_doc - starý obsah dokumentu je při novém indexování odstraněn automaticky.
Zaindexovávání dokumentů lze částečně automatizovat tím, že se funkce pro manuální zaindexování umístí do triggerů, které sledují vkládání, rušení a přepisování záznamů v tabulce dokumentů. Tím se ovšem ztratí možnost odloženého indexování.
Ukázka definice objektu typu fulltext bez fulltextových triggerů pro manuální indexování:
CREATE FULLTEXT FT_TEST2 LANGUAGE 0 LEMMATIZED NOT SUBSTRUCTURED ()
Ukázka SQL triggeru, který slouží k indexování:
TRIGGER `Doctab_UPD_ftx` AFTER UPDATE OF doc ON `Doctab` REFERENCING NEW AS newrec FOR EACH ROW BEGIN CALL Fulltext_index_doc('.ft_test2', newrec.id_doc, newrec.doc, 'txt', 0); END
Ukázka SQL procedury, která zaindexuje dosud neindexované dokumenty:
PROCEDURE `deferred_indexing`( ); BEGIN DECLARE i INTEGER DEFAULT 0; FOR row AS cx CURSOR FOR SELECT id_doc, doc, indexed FROM Doctab WHERE NOT indexed DO CALL Fulltext_index_doc('.ft_test_deferred', row.id_doc, row.doc, 'txt', 0); UPDATE SET indexed = TRUE WHERE CURRENT OF cx; SET i = i+1; END FOR; CALL Log_write(Int2str(i)+' document(s) indexed'); END
Označování a uložení dokumentů | Fulltext v 602SQL | Fulltextové vyhledávání dokumentů |