602SQL-Úplná dokumentace Index  

Příkaz CREATE FULLTEXT

příkaz_CREATE_FULLTEXT ::= CREATE FULLTEXT [ schéma. ] identifikátor LANGUAGE číslo_jazyka 
    [ [ NOT ] LEMMATIZED ] [ [ NOT ] SUBSTRUCTURED ] [ [ NOT ] SEPARATED ] [ [ NOT ] BIGINT_ID ]
    [ LIMITS pattern=size { , pattern=size }... ]
    [ WORD_STARTERS word_starters ] 
    [ WORD_CHARS word_chars ]
    [ ( fulltextový_trigger { , fulltextový_trigger }... ) ]
fulltextový_trigger ::= jméno_tabulky sloupec_id_dokumentu sloupec_dokumentu [, mode ] [ , formát ]
word_starters ::= řetězec_znaků
word_chars ::= řetězec_znaků

Příkaz CREATE FULLTEXT vytváří nový fulltextový systém v zadaném schématu označený zadaným identifikátorem. Zároveň vytvoří v témže schématu tabulky slov a referencí a sekvenci pro číslování dokumentů. Provedení příkazu nejen vytvoří výše uvedené objekty a vztahy, ale také vybuduje fulltextový systém s daty již obsaženými v uvedených sloupcích tabulek.

Číslo jazyka je číslo z této tabulky:
Číslo Jazyk Číslo Jazyk
0 čeština 3 americká angličtina
1 slovenština 4 britská angličtina
2 němčina    

Specifikace LEMMATIZED označuje fulltextový systém sledující slova v základním tvaru, NOT LEMMATIZED sleduje slova v tom tvaru, ve kterém se vyskytují v dokumentech. Není-li uvedeno ani jedno, platí LEMMATIZED.

Specifikace SUBSTRUCTURED označuje fulltextový systém sledující obsah archivů (formát ZIP), NOT SUBSTRUCTURED archivy neindexuje. Není-li uvedeno ani jedno, platí SUBSTRUCTURED.

Specifikace SEPARATED (od verze 9.5.1) označuje fulltextový systém, který buduje fulltextové indexy mimo databázový soubor v samostatném souboru na disku. Adresář pro umístění je implicitně stejný jako adresář pro databázový soubor, lze změnit vlastností serveru ExtFulltextDir nebo v okně Provozní parametry. Není-li specifikace uvedena, platí NOT SEPARATED (kompatibilita se staršími ftx systémy).

Specifikace BIGINT_ID (od verze 10.0.2) stanoví rozsah čísel dokumentů (identifikaci dokumentu ve fulltextu) - není li použita tato specifikace, je rozsahem typ INT (implicitní stav), v opačné případě typ BIGINT.

Pomocí klauzule LIMITS lze omezit indexování velkých externích souborů, které by mohlo příliš zatěžovat SQL server. Podrobnější popis je na stránce Omezení velikosti indexovaných souborů.

Klauzule WORD_STARTERS a WORD_CHARS dovolují definovat, jaký řetězec znaků je považován za slovo. WORD_STARTERS definuje, jakým znakem slovo začíná a WORD_CHARS určuje, jaké znaky obsahuje počínaje druhým znakem slova. Slovo může začínat buď písmenem nebo znakem obsaženým v řetězci word_starters. Slovo pak pokračuje, dokud následují písmena nebo znaky obsažené v řetězci word_chars. Není-li klauzule WORD_STARTERS při vytváření fulltextového systému uvedena, slovo může začínat (kromě písmen) znaky '_@0123456789'. Není-li klauzule WORD_CHARS při vytváření fulltextového systému uvedena, slovo může pokračovat (kromě písmen) znaky '_@0123456789-'.

Fulltextový trigger je požadavek na automatické indexování určitých dokumentů jednoho typu (není to trigger ve významu SQL jakožto objekt v aplikaci). Ve fulltextovém triggeru je uvedeno jméno tabulky a jména jejích dvou sloupců. Sloupec id dokumentu musí být typu INT nebo BIGINT. Sloupec dokumentu musí být typu CLOB, BLOB nebo řetězec znaků.

Fulltextový trigger nemusí být zadán - vytvořen pak bude prázdný ftx systém, který se neplní "automaticky", ale až při explicitním zavolání funkce Fulltext_index_doc. Toto se využívá v případech, kdy on-line indexování velkých dokumentů natolik zatěžuje server, že brzdí práci jiných klientů, a proto se indexování odkládá např. na noční hodiny a provádí se najednou pro více záznamů - podrobnosti viz Fulltextové systémy - indexace .

Mode je číslo, které udává způsob uložení dokumentu:
Mode Dokument uložen
0 v tabulce dokumentů ve sloupci Sloupec dokumentu
1 v externím souboru, jehož plné jméno je uloženo v tabulce dokumentů ve sloupci Sloupec dokumentu
Pokud mode není uvedeno, použije se mode 0.

Formát je řetězec znaků definující formát dokumentu. Pokud je prázdný nebo není uveden, fulltextový systém se pokusí rozpoznat formát z obsahu dokumentu. Je-li uveden, indexují se pouze dokumenty zvoleného formátu. Mezi podporované formáty patří:
Formát Popis
PLAIN | TXT | TEXT Neformátovaný text
HTM | HTML formát HTML
XML formát XML
RTF formát RTF
DOC formát DOC ((MS Word resp. OpenOffice.org))
XLS formát XLS (MS Excel resp. OpenOffice.org)
PPT formát PPT (MS PowerPoint resp. OpenOffice.org)
PDF formát PDF
OOO formát OpenOffice.org verze 1 (*.sxw, *.sxc apod.) i 2 (*.odt, *.ods apod.)
F0 formát XML formulářů používaných v 602XML
ZF0 zazipovaný formát XML formulářů používaných v 602XML

Příklady použití

Nejjednodušší případ - indexování hodnot jediného sloupce nazvaného DOC v tabulce DOCTAB, sloupec s unikátními hodnotami se jmenuje ID:

CREATE FULLTEXT FT_TEST LANGUAGE 0 LEMMATIZED NOT SUBSTRUCTURED
(DOCTAB ID_DOC DOC,'TXT')

Indexovat české binární dokumenty různých formátů včetně zipovaných vložené do BLOBu nazvaného BINARYDOC, fulltext bude externí (tj. uložen mimo databázový soubor):

CREATE FULLTEXT FT_BINARYTEST LANGUAGE 0 LEMMATIZED SUBSTRUCTURED SEPARATED
(DOCTAB ID_DOC BINARYDOC,'')

Indexovat otázky a odpovědi v diskuzním foru vedeném v češtině (tabulka FORUM_TAB), oba sloupce využívají jediný sloupec ID - ve výsledku hledání nepůjde rozlišit mezi sloupci.

CREATE FULLTEXT FT_FORUM LANGUAGE 0 LEMMATIZED NOT SUBSTRUCTURED
(FORUM_TAB ID F_QUESTION,'TXT',
 FORUM_TAB ID F_ANSWER,'TXT')

Totéž, ale každý indexovaný sloupec má svůj sloupec ID, oba sloupce ID jsou plněné jednou sekvencí - ve výsledku hledání půjde rozlišit mezi sloupci.

CREATE FULLTEXT FT_FORUM LANGUAGE 0 LEMMATIZED NOT SUBSTRUCTURED
(FORUM_TAB ID_Q F_QUESTION,'TXT',
 FORUM_TAB ID_A F_ANSWER,'TXT')

Fulltextový systém, který je plněn manuálně, tj. ne pomocí fulltextových trigerů, ale pomocí funkce Fulltext_index_doc.

CREATE FULLTEXT FT_FORUM LANGUAGE 0 LEMMATIZED NOT SUBSTRUCTURED
()

Viz