Sdílet prostřednictvím


VYTVOŘIT FULLTEXT INDEX (Transact-SQL)

platí pro: SQL Server Azure SQL DatabaseAzure SQL Managed Instance

Vytváří plnotextový index v tabulce nebo indexovaném pohledu v databázi v SQL Serveru. Na jednu tabulku nebo indexovaný pohled je povolen pouze jeden index plného textu a každý index s plným textem se vztahuje na jednu tabulku nebo indexovaný pohled. Index s plným textem může obsahovat až 1024 sloupců.

Transact-SQL konvence syntaxe

Syntaxe

CREATE FULLTEXT INDEX ON table_name
   [ ( { column_name
             [ TYPE COLUMN type_column_name ]
             [ LANGUAGE language_term ]
             [ STATISTICAL_SEMANTICS ]
        } [ , ...n ]
      ) ]
    KEY INDEX index_name
    [ ON <catalog_filegroup_option> ]
    [ WITH ( <with_option> [ , ...n ] ) ]
[;]

<catalog_filegroup_option>::=
 {
    fulltext_catalog_name
 | ( fulltext_catalog_name , FILEGROUP filegroup_name )
 | ( FILEGROUP filegroup_name , fulltext_catalog_name )
 | ( FILEGROUP filegroup_name )
 }

<with_option>::=
 {
   CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [ , NO POPULATION ] }
 | STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
 | SEARCH PROPERTY LIST [ = ] property_list_name
 }

Arguments

table_name

Název tabulky nebo indexovaného pohledu, který obsahuje sloupec nebo sloupce zahrnuté v indexu plného textu.

column_name

Název sloupce zahrnutého v plném textu indexu. Pro vyhledávání v plném textu lze indexovat pouze sloupce typu char, varchar, nchar, nvarchar, text, ntext, image, xml a varbinary(max). Pro určení více sloupců opakujte klauzuli column_name následovně:

VYTVOŘTE FULLTEXT INDEX NA table_name (column_name1 [...], column_name2 [...]) ...

TYP SLOUPCE type_column_name

Specifikuje název sloupce tabulky, type_column_name, který slouží k uložení typu dokumentu pro varbinární (max) nebo obrazový dokument. Tento sloupec, známý jako sloupec typu, obsahuje uživatelem zadanou příponu souboru (.doc, .pdf, .xlsa podobně). Sloupec typu musí být typu char, nchar, varchar nebo nvarchar.

Specifikujte TYP SLOUPCE type_column_name pouze tehdy, pokud column_name specifikuje varbinární (max) nebo obrazový sloupec, ve kterém jsou data uložena jako binární data; v opačném případě SQL Server vrací chybu.

Poznámka:

Při indexování používá Full-Text Engine zkratku ve sloupci type každého řádku tabulky k určení, který fulltextový vyhledávací filtr použít pro dokument v column_name. Filtr načte dokument jako binární proud, odstraní informace o formátování a odešle text z dokumentu do komponenty word-breaker. Další informace najdete v tématu Konfigurace a správa filtrů pro vyhledávání.

LANGUAGE_TERM JAZYKA

Jazyk dat uložených v column_name.

language_term je volitelný a může být zadán jako řetězec, celočíselná nebo hexadecimální hodnota odpovídající lokálnímu identifikátoru (LCID) jazyka. Pokud není uvedena žádná hodnota, použije se výchozí jazyk instance SQL Serveru.

Pokud je language_term specifikováno, jazyk, který reprezentuje, se používá k indexování dat uložených ve sloupcích char, nchar, varchar, text a ntext. Tento jazyk je výchozím jazykem používaným při dotazování, pokud language_term není specifikován jako součást plného textového predikátu vůči sloupci.

Pokud je zadán jako řetězec, odpovídá language_term hodnotě sloupce alias v tabulce sys.syslanguages systému. Řetězec musí být uzavřen v uvozovkách, například v 'language_term'. Pokud je zadáno jako celé číslo, language_term je skutečný identifikátor LCID, který identifikuje jazyk. Pokud je language_term0x zadána jako hexadecimální hodnota, následuje hexadecimální hodnota LCID. Hodnota hexu nesmí přesáhnout osm číslic, včetně vedoucích nul.

Pokud je hodnota ve formátu dvoubajtové znakové sady (DBCS), SQL Server ji převede na Unicode.

Zdroje, jako jsou word breakery a stemmery, musí být povoleny pro jazyk uvedený jako language_term. Pokud takové zdroje nepodporují daný jazyk, SQL Server vrátí chybu.

Použijte uloženou proceduru sp_configure k přístupu k informacím o výchozím fulltextovém jazyce instance Microsoft SQL Server. Pro více informací viz sp_configure (Transact-SQL).

Pro sloupce mimo BLOB a ne-XML obsahující textová data ve více jazycích, nebo pro případy, kdy jazyk textu uloženého ve sloupci není znám, může být vhodné použít0x0 neutrální () jazykový zdroj. Nejprve byste však měli pochopit možné důsledky používání neutrálního0x0 () jazykového zdroje. Pro informace o možných řešeních a důsledcích používání neutrálního0x0 () jazykového zdroje viz Vyberte jazyk při vytváření Full-Text indexu.

U dokumentů uložených ve sloupcích typu XML nebo BLOB se při indexování používá jazykové kódování v dokumentu. Například ve sloupcích XML atribut v XML dokumentech identifikuje xml:lang jazyk. V době dotazu se hodnota dříve zadaná v language_term stává výchozím jazykem používaným pro dotazy na plný text, pokud language_term není specifikována jako součást plnotextového dotazu.

STATISTICAL_SEMANTICS

Platí na: SQL Server (SQL Server 2012 (11.x) a novější)

Vytváří další indexy podobnosti klíčových frází a dokumentů, které jsou součástí statistického sémantického indexování. Další informace naleznete v tématu sémantické vyhledávání (SQL Server).

KLÍČOVÝ INDEX index_name

Název unikátního klíčového indexu na table_name. KEY INDEX musí být unikátní, jednoklíčový a nenulovatelný sloupec. Vyberte nejmenší unikátní klíčový index pro jedinečný klíč v plném textu. Pro nejlepší výkon doporučujeme celočíselný datový typ pro full-text klíč.

fulltext_catalog_name

Katalog s plným textem používaný pro celý textový rejstřík. Katalog musí již v databázi existovat. Tato klauzule je nepovinná. Pokud není specifikován, použije se výchozí katalog. Pokud neexistuje žádný výchozí katalog, SQL Server vrátí chybu.

filegroup_name FILEGROUP

Vytváří specifikovaný fulltextový index na určené skupině souborů. Skupina souborů už musí existovat. Pokud není specifikována klauzule FILEGROUP, je full-text index umístěn do stejné skupiny souborů jako základní tabulka nebo pohled pro nerozdělenou tabulku, nebo do primární souborové skupiny pro rozdělenou tabulku.

CHANGE_TRACKING [ = ] { MANUAL | AUTO | VYPNUTO [ , ŽÁDNÁ POPULACE ] }

Specifikuje, zda změny (aktualizace, mazání nebo vložení) provedené ve sloupcích tabulky, které jsou pokryty indexem plného textu, budou SQL Server propagovat do indexu plného textu. Změny dat prostřednictvím WRITETEXT a UPDATETEXT se v indexu plného textu neodrážejí a nejsou zachyceny sledováním změn.

  • MANUÁL

    Specifikuje, že sledované změny musí být propagovány ručně voláním ALTER FULLTEXT INDEX ... ZAHAJTE AKTUALIZACI POPULACE Transact-SQL VÝKAZ (RUČNÍ POPULACE). Agenta SQL Serveru můžete použít k pravidelnému volání tohoto příkazu Transact-SQL.

  • AUTO

    Specifikuje, že sledované změny jsou automaticky propagovány při úpravě dat v základní tabulce (automatická populace). Ačkoli jsou změny šířeny automaticky, nemusí být okamžitě zobrazeny v indexu plného textu. AUTO je výchozí nastavení.

VYPNUTO [ , ŽÁDNÁ POPULACE ]

Specifikuje, že SQL Server neuchovává seznam změn v indexovaných datech. Když není uvedena ŽÁDNÁ POPULACE, SQL Server po jeho vytvoření index plně naplní.

Možnost ŽÁDNÁ POPULACE lze použít pouze tehdy, když CHANGE_TRACKING VYPNUTO. Pokud není zadána ŽÁDNÁ POPULACE, SQL Server po svém vytvoření nevyplní žádný index. Index se naplní až poté, co uživatel provede příkaz ALTER FULLTEXT INDEX s klauzulí START FULL POPULATION nebo START INCREMENTAL POPULATION.

STOPLIST [ = ] { VYPNUTO | SYSTÉM | stoplist_name }

Přiřazuje k indexu plnotextový seznam stop. Index není vyplněn žádnými tokeny, které jsou součástí specifikovaného stoplistu. Pokud STOPLIST není specifikován, SQL Server přiřadí systémový plnotextový stoplist k indexu.

  • Vypnuto

    Specifikuje, že žádný stoplist není spojen s plným textovým indexem.

  • SYSTEM

    Specifikuje, že pro tento fulltextový index by měl být použit výchozí fulltextový systém STOPLIST.

  • stoplist_name

    Specifikuje název seznamu stop, který má být spojen s indexem plného textu.

VYHLEDÁVAT SEZNAM NEMOVITOSTÍ [ = ] property_list_name

Platí na: SQL Server (SQL Server 2012 (11.x) a novější)

Přiřazuje seznam vyhledávacích nemovitostí k indexu.

  • Vypnuto

    Specifikuje, že s indexem plného textu není přiřazen žádný seznam vlastností.

  • property_list_name

    Specifikuje název seznamu vlastností vyhledávání, který se má spojit s indexem plného textu.

Poznámky

Na sloupcích XML můžete vytvořit plnotextový index, který indexuje obsah XML prvků, ale ignoruje XML značkování. Hodnoty atributů jsou indexovány v plném textu, pokud nejsou číselné. Prvky se používají jako hranice tokenů. Podporovány jsou dobře zpracované XML nebo HTML dokumenty a fragmenty obsahující více jazyků. Další informace najdete v tématu Použití Full-Text vyhledávání se sloupci XML.

Doporučujeme, aby sloupec indexového klíče byl celočíselný datový typ. To poskytuje optimalizace při provádění dotazu.

CREATE FULLTEXT INDEX nelze umístit do uživatelské transakce. Tento výrok musí být spuštěn ve vlastní implicitní transakci.

Pro více informací o plnotextových indexech viz Vytvořit a spravovat Full-Text indexy.

Interakce sledování změn a ABSENCE POPULATION parametru

Zda je full-text index vyplněn, závisí na tom, zda je sledování změn povoleno a zda je v příkazu ALTER FULLTEXT INDEX specifikováno WITH NO POPULATION. Následující tabulka shrnuje výsledek jejich interakce.

Change Tracking BEZ OBYVATELSTVA Result
Nepovoleno Neurčeno Na indexu se provádí celá populace.
Nepovoleno Specifikovaný Žádná populace indexu nenastane, dokud nenastane ALTER FULLTEXT INDEX... Je vydáno hlášení o populaci START.
Enabled Specifikovaný Chyba se objeví a index se nezmění.
Enabled Neurčeno Na indexu se provádí celá populace.

Pro více informací o vyplňování indexů s plným textem viz Doplňovat Full-Text Indexy.

Povolení

Uživatel musí mít REFERENCES oprávnění k plnotextovému katalogu a ALTER k tabulce nebo indexovanému zobrazení, nebo být členem sysadmin role pevného serveru, nebo db_owner, či db_ddladmin pevných databázových rolí.

Pokud SET STOPLIST je uvedeno, uživatel musí mít na určeném seznamu stop listu oprávnění ODKAZY. Majitel STOPLISTU může toto povolení udělit.

Poznámka:

Veřejnosti je uděleno REFERENCE povolení k výchozímu stoplistu, který je dodáván se SQL Serverem.

Examples

A. Vytvořte jedinečný rejstřík, katalog s plným textem a index s plným textem

Následující příklad vytváří jedinečný index ve sloupci JobCandidateID tabulky HumanResources.JobCandidate vzorové databáze AdventureWorks2025. Příklad pak vytváří výchozí katalog s plným textem, ft. Nakonec příklad vytváří plnotextový index na sloupci Resume pomocí katalogu ft a systémového stoplistu.

CREATE UNIQUE INDEX ui_ukJobCand ON HumanResources.JobCandidate(JobCandidateID);
CREATE FULLTEXT CATALOG ft AS DEFAULT;
CREATE FULLTEXT INDEX ON HumanResources.JobCandidate(Resume)
   KEY INDEX ui_ukJobCand
   WITH STOPLIST = SYSTEM;
GO

B. Vytvořte celý textový index pro několik sloupců tabulky

Následující příklad vytvoří fulltextový katalog production_catalogv ukázkové databázi AdventureWorks. Příklad pak vytvoří fulltextový index, který používá tento nový katalog. Index plného textu je na , ReviewerNameEmailAddress, a Comments sloupcích .Production.ProductReview Pro každý sloupec příklad specifikuje LCID angličtiny, 1033, což je jazyk dat ve sloupcích. Tento plnotextový index používá existující unikátní klíčový index, PK_ProductReview_ProductReviewID. Jak je doporučeno, tento indexový klíč je na celočíselném sloupci ProductReviewID.

CREATE FULLTEXT CATALOG production_catalog;
GO

CREATE FULLTEXT INDEX ON Production.ProductReview (
    ReviewerName LANGUAGE 1033,
    EmailAddress LANGUAGE 1033,
    Comments LANGUAGE 1033
) KEY INDEX PK_ProductReview_ProductReviewID ON production_catalog;
GO

C. Vytvořte plnotextový index se seznamem vlastností vyhledávání bez jeho vyplnění

Následující příklad vytváří index plného textu na Titlesloupcích tabulkyDocumentSummaryProduction.Document, , a Document sloupcích. Příklad specifikuje LCID angličtiny, 1033, což je jazyk dat ve sloupcích. Tento plnotextový index používá výchozí fulltextový katalog a existující unikátní klíčový index, PK_Document_DocumentID. Jak je doporučeno, tento indexový klíč je na celočíselném sloupci DocumentID.

Příklad specifikuje SYSTEM stoplist. Specifikuje také seznam vlastností vyhledávání, DocumentPropertyList; pro příklad, který tento seznam vlastností vytvoří, viz VYTVOŘIT SEZNAM VLASTNOSTÍ VYHLEDÁVÁNÍ (Transact-SQL).

Příklad uvádí, že sledování změn je vypnuto, pokud není populace. Později, během mimo špičku, příklad používá příkaz ALTER FULLTEXT INDEX k zahájení plné populace nového indexu a umožnění automatického sledování změn.

CREATE FULLTEXT INDEX ON Production.Document (
    Title LANGUAGE 1033,
    DocumentSummary LANGUAGE 1033,
    Document TYPE COLUMN FileExtension LANGUAGE 1033
) KEY INDEX PK_Document_DocumentID
WITH STOPLIST = SYSTEM,
    SEARCH PROPERTY LIST = DocumentPropertyList,
    CHANGE_TRACKING OFF,
    NO POPULATION;
GO

Index je naplněn později, v době mimo špičku.

ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO;
GO

Viz také