Sdílet prostřednictvím


Povolení sémantického vyhledávání v tabulkách a sloupcích

platí pro:SQL Server

Popisuje, jak povolit nebo zakázat statistické sémantické indexování u vybraných sloupců, které obsahují dokumenty nebo text.

Statistické sémantické vyhledávání používá indexy vytvořené službou Full-Text Search a vytváří další indexy. V důsledku této závislosti na fulltextovém vyhledávání vytvoříte nový sémantický index při definování nového fulltextového indexu nebo při změně existujícího fulltextového indexu. Nový sémantický index můžete vytvořit pomocí příkazů Transact-SQL nebo pomocí Průvodce indexováním Full-Text a dalších dialogových oken v sadě SQL Server Management Studio, jak je popsáno v tomto článku.

Vytvoření sémantického indexu

Požadavky a omezení pro vytvoření sémantického indexu

  • Index můžete vytvořit u kteréhokoli z databázových objektů, které jsou podporovány pro fulltextové indexování, včetně tabulek a indexovaných zobrazení.

  • Před povolením sémantického indexování pro konkrétní sloupce musí existovat následující požadavky:

    • Pro databázi musí existovat fulltextový katalog.

    • Tabulka musí mít fulltextový index.

    • Vybrané sloupce se musí účastnit fulltextového indexu.

    Všechny tyto požadavky můžete vytvořit a povolit současně.

  • Sémantický index můžete vytvořit u sloupců, které mají některý z datových typů podporovaných pro fulltextové indexování. Další informace naleznete v tématu Vytvoření a správa indexů Full-Text.

  • Pro sloupce varbinary(max) můžete zadat libovolný typ dokumentu, který je podporovaný pro fulltextové indexování. Další informace najdete v tématu Postupy: Určení typů dokumentů, které lze indexovat v tomto článku.

  • Sémantické indexování vytvoří dva typy indexů pro vybrané sloupce – index klíčových frází a index podobnosti dokumentu. Pokud povolíte sémantické indexování, nemůžete vybrat jenom jeden typ indexu nebo druhý. Na tyto dva indexy se ale můžete dotazovat nezávisle. Další informace najdete v tématu Hledání klíčových frází v dokumentech pomocí sémantických vyhledávacích a Najít podobné a související dokumenty pomocí sémantického vyhledávání.

  • Pokud explicitně nezadáte LCID pro sémantický index, použije se pro sémantické indexování pouze primární jazyk a související statistika jazyka.

  • Pokud zadáte jazyk pro sloupec, pro který jazykový model není dostupný, vytvoření indexu selže a vrátí chybovou zprávu.

Vytvoření sémantického indexu, pokud neexistuje žádný fulltextový index

Při vytváření nového fulltextového indexu pomocí příkazu CREATE FULLTEXT INDEX můžete povolit sémantické indexování na úrovni sloupce zadáním klíčového slova STATISTICAL_SEMANTICS jako součást definice sloupce. Sémantické indexování můžete také povolit při použití průvodce indexováním Full-Text k vytvoření nového fulltextového indexu.

Vytvoření nového sémantického indexu pomocí Transact-SQL

Zavolejte příkaz CREATE FULLTEXT INDEX a zadejte STATISTICAL_SEMANTICS pro každý sloupec, pro který chcete vytvořit sémantický index. Další informace o všech možnostech tohoto příkazu naleznete v tématu CREATE FULLTEXT INDEX (Transact-SQL).

Příklad 1: Vytvoření jedinečného indexu, fulltextového indexu a sémantického indexu

Následující příklad vytvoří výchozí fulltextový katalog ft. Příklad pak vytvoří jedinečný index ve sloupci JobCandidateID tabulky HumanResources.JobCandidate ukázkové databáze AdventureWorks2022. Tento jedinečný index se vyžaduje jako klíčový sloupec pro fulltextový index. Příklad pak vytvoří fulltextový index a sémantický index ve sloupci Resume.

CREATE FULLTEXT CATALOG ft AS DEFAULT
GO

CREATE UNIQUE INDEX ui_ukJobCand
    ON HumanResources.JobCandidate(JobCandidateID)
GO

CREATE FULLTEXT INDEX ON HumanResources.JobCandidate
    (Resume
        Language 1033
        Statistical_Semantics
    )
    KEY INDEX JobCandidateID
    WITH STOPLIST = SYSTEM
GO

Příklad 2: Vytvoření fulltextového a sémantického indexu u několika sloupců se zpožděným naplněním indexu

Následující příklad vytvoří fulltextový katalog documents_catalogv ukázkové databázi AdventureWorks2022. Příklad pak vytvoří fulltextový index, který používá tento nový katalog. Fulltextový index se vytvoří ve sloupci Title, DocumentSummarya Document tabulky Production.Document, zatímco sémantický index se vytvoří pouze ve sloupci Document. Tento fulltextový index používá nově vytvořený fulltextový katalog a existující jedinečný klíčový index PK_Document_DocumentID. Podle doporučení se tento klíč indexu vytvoří v celočíselném sloupci DocumentID. Příklad určuje LCID pro angličtinu 1033, což je jazyk dat ve sloupcích.

Tento příklad také určuje, že sledování změn je vypnuté bez populace. Později v době mimo špičku použije příklad příkaz ALTER FULLTEXT INDEX k zahájení úplného počtu obyvatel nového indexu a povolení automatického sledování změn.

CREATE FULLTEXT CATALOG documents_catalog
GO

CREATE FULLTEXT INDEX ON Production.Document
    (
    Title
        Language 1033,
    DocumentSummary
        Language 1033,
    Document
        TYPE COLUMN FileExtension
        Language 1033
        Statistical_Semantics
    )
    KEY INDEX PK_Document_DocumentID
        ON documents_catalog
        WITH 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

Vytvoření nového sémantického indexu pomocí aplikace SQL Server Management Studio

Spusťte průvodce indexováním Full-Text a povolte statistickou sémantiku na stránce Vybrat sloupce tabulky pro každý sloupec, pro který chcete vytvořit sémantický index. Další informace, včetně informací o tom, jak spustit průvodce indexováním Full-Text, naleznete v tématu Použití průvodce indexováním Full-Text.

Vytvoření sémantického indexu, pokud existuje existující fulltextový index

Sémantické indexování můžete přidat při změně existujícího fulltextového indexu pomocí příkazu ALTER FULLTEXT INDEX. Sémantické indexování můžete také přidat pomocí různých dialogových oken v aplikaci SQL Server Management Studio.

Přidání sémantického indexu pomocí Transact-SQL

Vyvolejte příkaz ALTER FULLTEXT INDEX s možnostmi popsanými v následující části pro každý sloupec, ke kterému chcete přidat sémantický index. Další informace o všech možnostech tohoto příkazu naleznete v tématu ALTER FULLTEXT INDEX (Transact-SQL).

Fulltextové i sémantické indexy se přepočítávají po volání ALTER, pokud neurčíte jinak.

  • Pokud chcete do sloupce přidat fulltextové indexování, použijte syntaxi ADD.

  • Pokud chcete do sloupce přidat fulltextové i sémantické indexování, použijte syntaxi ADD s možností STATISTICAL_SEMANTICS.

  • Pokud chcete přidat sémantické indexování do sloupce, který je již povolený pro fulltextové indexování, použijte možnost ADD STATISTICAL_SEMANTICS. V jednom příkazu ALTER můžete přidat pouze sémantické indexování do jednoho sloupce.

Příklad: Přidání sémantického indexování do sloupce, který už má fulltextové indexování

Následující příklad změní existující fulltextový index u tabulky Production.Document v ukázkové databázi AdventureWorks2022. Příklad přidá sémantický index do Document sloupce tabulky Production.Document, který už má fulltextový index. Příklad určuje, že index se automaticky nepřepočítá.

ALTER FULLTEXT INDEX ON Production.Document
    ALTER COLUMN Document
        ADD Statistical_Semantics
    WITH NO POPULATION
GO

Přidání sémantického indexu pomocí aplikace SQL Server Management Studio

Sloupce, které jsou povolené pro sémantické a fulltextové indexování, můžete změnit na stránce sloupce indexu Full-Text v dialogovém okně Full-Text Vlastnosti indexu. Další informace naleznete v tématu Správa indexů Full-Text.

Změna sémantického indexu

Požadavky a omezení pro změnu existujícího indexu

  • Existující index nelze změnit, pokud probíhá naplňování indexu. Další informace o monitorování průběhu populace indexů naleznete v tématu Správa a monitorování sémantického vyhledávání.

  • Indexování nemůžete přidat do sloupce a změnit nebo odstranit indexování pro stejný sloupec v jediném volání příkazu ALTER FULLTEXT INDEX.

Odstranění sémantického indexu

Sémantické indexování můžete odstranit při změně existujícího fulltextového indexu pomocí příkazu ALTER FULLTEXT INDEX. Sémantické indexování můžete také odstranit pomocí různých dialogových oken v aplikaci SQL Server Management Studio.

Odstranění sémantického indexu pomocí Transact-SQL

Chcete-li odstranit sémantické indexování pouze ze sloupce nebo sloupců, zavolejte příkaz ALTER FULLTEXT INDEX s možností ALTER COLUMN <column_name> DROP STATISTICAL_SEMANTICS. Indexování z více sloupců můžete v jednom příkazu ALTER odstranit.

USE database_name;
GO

ALTER FULLTEXT INDEX
    ALTER COLUMN column_name
    DROP STATISTICAL_SEMANTICS;
GO

Pokud chcete odstranit fulltextové a sémantické indexování ze sloupce, zavolejte příkaz ALTER FULLTEXT INDEX s volbou ALTER COLUMN <column_name> DROP.

USE database_name;
GO

ALTER FULLTEXT INDEX
    ALTER COLUMN column_name
    DROP;
GO

Vyřazení sémantického indexu pomocí aplikace SQL Server Management Studio

Sloupce, které jsou povolené pro sémantické a fulltextové indexování, můžete změnit na stránce sloupce indexu Full-Text v dialogovém okně Full-Text Vlastnosti indexu. Další informace naleznete v tématu Správa indexů Full-Text.

Požadavky a omezení pro vyřazení sémantického indexu

  • Při zachování sémantického indexování nemůžete ze sloupce odstranit fulltextové indexování. Sémantické indexování závisí na fulltextového indexování pro výsledky podobnosti dokumentu.

  • Možnost NO POPULATION nelze zadat, když odstraníte sémantické indexování z posledního sloupce v tabulce, pro kterou bylo sémantické indexování povoleno. K odstranění dříve indexovaných výsledků je nutný populační cyklus.

Kontrola, jestli je u databázových objektů povolené sémantické vyhledávání

Je pro databázi povolené sémantické vyhledávání?

Zjistěte vlastnost IsFullTextEnabled metadatové funkce DATABASEPROPERTYEX (Transact-SQL).

Návratová hodnota 1 označuje, že pro databázi je povolené fulltextové vyhledávání a sémantické vyhledávání. Návratová hodnota 0 označuje, že nejsou povolené.

SELECT DATABASEPROPERTYEX('database_name', 'IsFullTextEnabled');
GO

Je pro tabulku povolené sémantické vyhledávání?

Dotaz na vlastnosti TableFullTextSemanticExtraction metadata funkce OBJECTPROPERTYEX (Transact-SQL) objektu.

Návratová hodnota 1 označuje, že je pro tabulku povoleno sémantické vyhledávání; návratová hodnota 0 označuje, že není povolená.

SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFullTextSemanticExtraction')
GO

Je pro sloupec povolené sémantické vyhledávání?

Určení, jestli je pro konkrétní sloupec povolené sémantické vyhledávání:

  • Dotazovat se na vlastnost StatisticalSemantics pomocí funkce metadata COLUMNPROPERTY (Transact-SQL).

    Návratová hodnota 1 označuje, že je pro sloupec povolené sémantické vyhledávání; návratová hodnota 0 označuje, že není povolená.

    SELECT COLUMNPROPERTY(OBJECT_ID('table_name'), 'column_name', 'StatisticalSemantics');
    GO
    
  • Zadejte dotaz na zobrazení katalogu sys.fulltext_index_columns (Transact-SQL) pro fulltextový index.

    Hodnota 1 ve sloupci statistical_semantics označuje, že zadaný sloupec má kromě fulltextového indexování povolené sémantické indexování.

    SELECT * FROM sys.fulltext_index_columns
    WHERE object_id = OBJECT_ID('table_name');
    GO
    
  • V Průzkumníku objektů v Management Studiu klikněte pravým tlačítkem na sloupec a vyberte Vlastnosti. Na stránce Obecné dialogového okna Vlastnosti sloupce zkontrolujte hodnotu vlastnosti Statistická sémantika.

    Hodnota True označuje, že zadaný sloupec je povolen pro sémantické indexování kromě fulltextového indexování.

Kontrola podporovaných jazyků pro sémantické vyhledávání

Pro sémantické indexování se podporuje méně jazyků než pro fulltextové indexování. V důsledku toho mohou být sloupce, které můžete indexovat pro fulltextové vyhledávání, ale ne pro sémantické vyhledávání.

Proveďte dotaz na zobrazení katalogu sys.fulltext_semantic_languages (Transact-SQL).

SELECT * FROM sys.fulltext_semantic_languages;
GO

Pro sémantické indexování se podporují následující jazyky. Tento seznam představuje výstup zobrazení katalogu sys.fulltext_semantic_languages (Transact-SQL), seřazený podle LCID.

Jazyk LCID
Tradiční čínština 1028
Němčina 1031
Americká angličtina 1033
Francouzština 1036
Italština 1040
Brazilský 1046
Ruština 1049
Švédština 1053
Zjednodušená čínština 2052
Britská angličtina 2057
Portugalština 2070
Čínština (Hongkong, SAR, ČLR) 2070
Španělština 3082
Čínština (Singapur) 4100
Čínština (Macao SAR) 5124

Poznámka

Pokud jsou výsledky prázdné, musíte stáhnout a nainstalovat databázi Statistika sémantického jazyka. Další informace naleznete v tématu Instalace, připojení a registrace databáze sémantické jazykové statistiky.

Určení typů dokumentů, které lze indexovat

Proveďte dotaz na zobrazení katalogu sys.fulltext_document_types (Transact-SQL).

Pokud typ dokumentu, který chcete indexovat, není v seznamu podporovaných typů, budete možná muset vyhledat, stáhnout a nainstalovat další filtry. Pro více informací se podívejte na Zobrazení nebo změna registrovaných filtrů a dělitele slov.

Osvědčený postup: Vytvoření samostatné skupiny souborů pro fulltextové a sémantické indexy

Pokud se jedná o přidělení místa na disku, zvažte vytvoření samostatné skupiny souborů pro fulltextové a sémantické indexy. Sémantické indexy se vytvoří ve stejné skupině souborů jako fulltextový index. Plně naplněný sémantický index může obsahovat velké množství dat.

Problém: Hledání podle konkrétního sloupce nevrací žádné výsledky

Byl pro jazyk Unicode zadán LCID, který není Unicode?

U typu sloupce, který není unicode, je možné povolit sémantické indexování pomocí LCID pro jazyk, který obsahuje pouze slova Unicode, jako je LCID 1049 pro ruštinu. V tomto případě se v tomto sloupci nikdy nevrátí žádné výsledky z sémantických indexů.