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_catalog
v ukázkové databázi AdventureWorks2022
. Příklad pak vytvoří fulltextový index, který používá tento nový katalog. Fulltextový index se vytvoří ve sloupci Title
, DocumentSummary
a 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říkazuALTER
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í.
Určení toho, co se dá indexovat pro sémantické vyhledává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ů.