Dela via


Aktivera semantisk sökning i tabeller och kolumner

gäller för:SQL Server

Beskriver hur du aktiverar eller inaktiverar statistisk semantisk indexering för valda kolumner som innehåller dokument eller text.

Statistisk semantisk sökning använder indexen som skapats av Full-Text Search och skapar extra index. Som ett resultat av det här beroendet av fulltextsökning skapar du ett nytt semantiskt index när du definierar ett nytt fulltextindex eller när du ändrar ett befintligt fulltextindex. Du kan skapa ett nytt semantiskt index med hjälp av Transact-SQL-instruktioner eller med hjälp av guiden Full-Text indexering och andra dialogrutor i SQL Server Management Studio enligt beskrivningen i den här artikeln.

Skapa ett semantiskt index

Krav och begränsningar för att skapa ett semantiskt index

  • Du kan skapa ett index för alla databasobjekt som stöds för fulltextindexering, inklusive tabeller och indexerade vyer.

  • Innan du kan aktivera semantisk indexering för specifika kolumner måste följande förutsättningar finnas:

    • Det måste finnas en fulltextkatalog för databasen.

    • Tabellen måste ha ett fulltextindex.

    • De markerade kolumnerna måste delta i fulltextindexet.

    Du kan skapa och aktivera alla dessa krav samtidigt.

  • Du kan skapa ett semantiskt index för kolumner som har någon av de datatyper som stöds för fulltextindexering. Mer information finns i Skapa och hantera Full-Text index.

  • Du kan ange vilken dokumenttyp som helst som stöds för fulltextindexering för varbinary(max) kolumner. För mer information, se Så här: Fastställ vilka dokumenttyper som kan indexeras i den här artikeln.

  • Semantisk indexering skapar två typer av index för de kolumner som du väljer – ett index med nyckelfraser och ett index med dokumentlikhet. Du kan inte bara välja en typ av index eller en annan när du aktiverar semantisk indexering. Du kan dock köra frågor mot dessa två index oberoende av varandra. Mer information finns i Hitta nyckelfraser i dokument med semantisk sökning och Hitta liknande och relaterade dokument med semantisk sökning.

  • Om du inte uttryckligen anger en LCID för ett semantiskt index används endast det primära språket och dess associerade språkstatistik för semantisk indexering.

  • Om du anger ett språk för en kolumn som språkmodellen inte är tillgänglig för misslyckas skapandet av indexet och returnerar ett felmeddelande.

Skapa ett semantiskt index när det inte finns något fulltextindex

När du skapar ett nytt fulltextindex med CREATE FULLTEXT INDEX-instruktionen kan du aktivera semantisk indexering på kolumnnivå genom att ange nyckelordet STATISTICAL_SEMANTICS som en del av kolumndefinitionen. Du kan också aktivera semantisk indexering när du använder guiden Full-Text indexering för att skapa ett nytt fulltextindex.

Skapa ett nytt semantiskt index med hjälp av Transact-SQL

Anropa CREATE FULLTEXT INDEX-instruktionen och ange STATISTICAL_SEMANTICS för varje kolumn där du vill skapa ett semantiskt index. Mer information om alla alternativ för den här instruktionen finns i CREATE FULLTEXT INDEX (Transact-SQL).

Exempel 1: Skapa ett unikt index, fulltextindex och semantiskt index

I följande exempel skapas en standardkatalog för fulltext, ft. Exemplet skapar sedan ett unikt index i kolumnen JobCandidateID i HumanResources.JobCandidate-tabellen i AdventureWorks2022 exempeldatabas. Det här unika indexet krävs som nyckelkolumn för ett fulltextindex. Exemplet skapar sedan ett fulltextindex och ett semantiskt index i kolumnen 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

Exempel 2: Skapa ett fulltext- och semantiskt index på flera kolumner med fördröjd indexpopulation

I följande exempel skapas en fulltextkatalog, documents_catalog, i AdventureWorks2022 exempeldatabas. Exemplet skapar sedan ett fulltextindex som använder den nya katalogen. Fulltextindexet skapas i kolumnerna Title, DocumentSummaryoch Document i tabellen Production.Document, medan det semantiska indexet bara skapas i kolumnen Document. Det här fulltextindexet använder den nyligen skapade fulltextkatalogen och ett befintligt unikt nyckelindex PK_Document_DocumentID. Som vi rekommenderar skapas den här indexnyckeln i en heltalskolumn DocumentID. Exemplet anger LCID för engelska, 1033, som är språket för data i kolumnerna.

Det här exemplet anger också att ändringsspårningen är inaktiverad utan population. Senare, under tider med låg belastning, använder exemplet en ALTER FULLTEXT INDEX-instruktion för att starta en fullständig population på det nya indexet och aktivera automatisk ändringsspårning.

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

Senare, vid en låg belastning, fylls indexet i:

ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO
GO

Skapa ett nytt semantiskt index med hjälp av SQL Server Management Studio

Kör guiden Full-Text indexering och aktivera statistiska semantik på sidan Välj tabellkolumner för varje kolumn där du vill skapa ett semantiskt index. Mer information, inklusive information om hur du startar Full-Text indexeringsguiden, finns i Använd Full-Text indexeringsguiden.

Skapa ett semantiskt index när det finns ett befintligt fulltextindex

Du kan lägga till semantisk indexering när du ändrar ett befintligt fulltextindex med instruktionen ALTER FULLTEXT INDEX. Du kan också lägga till semantisk indexering med hjälp av olika dialogrutor i SQL Server Management Studio.

Lägg till ett semantiskt index med hjälp av Transact-SQL

Anropa ALTER FULLTEXT INDEX-instruktionen med de alternativ som beskrivs i följande avsnitt för varje kolumn där du vill lägga till ett semantiskt index. För mer information om alla alternativ för detta uttalande, se ALTER FULLTEXT INDEX (Transact-SQL).

Både fulltext- och semantiska index fylls i igen efter ett anrop till ALTER, om du inte anger något annat.

  • Om du bara vill lägga till fulltextindexering i en kolumn använder du syntaxen ADD.

  • Om du vill lägga till både fulltext- och semantisk indexering i en kolumn använder du ADD syntax med alternativet STATISTICAL_SEMANTICS.

  • Om du vill lägga till semantisk indexering i en kolumn som redan är aktiverad för fulltextindexering använder du alternativet ADD STATISTICAL_SEMANTICS. Du kan bara lägga till semantisk indexering i en kolumn i en enda ALTER-instruktion.

Exempel: Lägg till semantisk indexering i en kolumn som redan har fulltextindexering

I följande exempel ändras ett befintligt fulltextindex i Production.Document tabell i AdventureWorks2022 exempeldatabas. Exemplet lägger till ett semantiskt index i kolumnen Document i tabellen Production.Document, som redan har ett fulltextindex. Exemplet anger att indexet inte fylls i automatiskt.

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

Lägga till ett semantiskt index med hjälp av SQL Server Management Studio

Du kan ändra de kolumner som är aktiverade för semantisk indexering och fulltextindexering på sidan Full-Text indexkolumner i dialogrutan Full-Text Indexegenskaper. Mer information finns i Hantera Full-Text index.

Ändra ett semantiskt index

Krav och begränsningar för att ändra ett befintligt index

  • Du kan inte ändra ett befintligt index medan populationen av indexet pågår. Mer information om hur du övervakar förloppet för indexpopulationen finns i Hantera och övervaka semantisk sökning.

  • Du kan inte lägga till indexering i en kolumn och ändra eller släppa indexering för samma kolumn i ett enda anrop till ALTER FULLTEXT INDEX-instruktionen.

Ta bort ett semantiskt index

Du kan släppa semantisk indexering när du ändrar ett befintligt fulltextindex med ALTER FULLTEXT INDEX-instruktionen. Du kan också släppa semantisk indexering med hjälp av olika dialogrutor i SQL Server Management Studio.

Ta bort ett semantiskt index med hjälp av Transact-SQL

Om du bara vill släppa semantisk indexering från en kolumn eller kolumner anropar du instruktionen ALTER FULLTEXT INDEX med alternativet ALTER COLUMN <column_name> DROP STATISTICAL_SEMANTICS. Du kan släppa indexeringen från flera kolumner i en enda ALTER-instruktion.

USE database_name;
GO

ALTER FULLTEXT INDEX
    ALTER COLUMN column_name
    DROP STATISTICAL_SEMANTICS;
GO

Om du vill släppa både fulltext- och semantisk indexering från en kolumn anropar du ALTER FULLTEXT INDEX-instruktionen med alternativet ALTER COLUMN <column_name> DROP.

USE database_name;
GO

ALTER FULLTEXT INDEX
    ALTER COLUMN column_name
    DROP;
GO

Ta bort ett semantiskt index med SQL Server Management Studio

Du kan ändra de kolumner som är aktiverade för semantisk indexering och fulltextindexering på sidan Full-Text indexkolumner i dialogrutan Full-Text Indexegenskaper. Mer information finns i Hantera Full-Text Index.

Krav och begränsningar för att ta bort ett semantiskt index

  • Du kan inte släppa fulltextindexering från en kolumn samtidigt som du behåller semantisk indexering. Semantisk indexering beror på fulltextindexering för dokumentlikhetsresultat.

  • Du kan inte ange alternativet NO POPULATION när du släpper semantisk indexering från den sista kolumnen i en tabell som semantisk indexering har aktiverats för. En befolkningscykel krävs för att ta bort resultaten som indexerades tidigare.

Kontrollera om semantisk sökning är aktiverat på databasobjekt

Är semantisk sökning aktiverat för en databas?

Hämta egenskapen IsFullTextEnabled för DATABASEPROPERTYEX (Transact-SQL) metadatafunktions.

Ett returvärde för 1 anger att fulltextsökning och semantisk sökning är aktiverade för databasen. Ett returvärde för 0 anger att de inte är aktiverade.

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

Är semantisk sökning aktiverat för en tabell?

Kör en fråga på TableFullTextSemanticExtraction-egenskapen i metadatafunktionen OBJECTPROPERTYEX (Transact-SQL).

Ett returvärde på 1 anger att semantisk sökning är aktiverat för tabellen. ett returvärde på 0 anger att det inte är aktiverat.

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

Är semantisk sökning aktiverat för en kolumn?

Så här avgör du om semantisk sökning är aktiverat för en specifik kolumn:

  • Hämta egenskapen StatisticalSemantics för COLUMNPROPERTY-metadatfunktionen (Transact-SQL).

    Ett returvärde på 1 anger att semantisk sökning är aktiverat för kolumnen. ett returvärde på 0 anger att det inte är aktiverat.

    SELECT COLUMNPROPERTY(OBJECT_ID('table_name'), 'column_name', 'StatisticalSemantics');
    GO
    
  • Fråga katalogvyn sys.fulltext_index_columns (Transact-SQL) för att få information om fulltextindexet.

    Värdet 1 i kolumnen statistical_semantics anger att den angivna kolumnen är aktiverad för semantisk indexering utöver fulltextindexering.

    SELECT * FROM sys.fulltext_index_columns
    WHERE object_id = OBJECT_ID('table_name');
    GO
    
  • Högerklicka på en kolumn i Object Explorer i Management Studio och välj Egenskaper. På sidan Allmänt i dialogrutan Kolumnegenskaper markerar du värdet för egenskapen Statistiska semantik.

    Värdet True anger att den angivna kolumnen är aktiverad för semantisk indexering utöver fulltextindexering.

Kontrollera vilka språk som stöds för semantisk sökning

Färre språk stöds för semantisk indexering än för fulltextindexering. Därför kan det finnas kolumner som du kan indexera för fulltextsökning, men inte för semantisk sökning.

Sök i katalogvyn sys.fulltext_semantic_languages (Transact-SQL).

SELECT * FROM sys.fulltext_semantic_languages;
GO

Följande språk stöds för semantisk indexering. Den här listan representerar utdata från katalogvyn sys.fulltext_semantic_languages (Transact-SQL), ordnade efter LCID.

Språk LCID
Traditionell kinesiska 1028
Tyska 1031
Engelska (US) 1033
Franska 1036
Italienska 1040
Brasiliansk 1046
Ryska 1049
Svenska 1053
Förenklad kinesiska 2052
Brittisk engelska 2057
Portugisiska 2070
Kinesiska (Hongkong, särskild administrativ region, Kina) 2070
Spanska 3082
Kinesiska (Singapore) 4100
Kinesiska (Macao SAR) 5124

Obs

Om resultatet är tomt måste du ladda ned och installera databasen Semantic Language Statistics. Mer information finns i Installera, bifoga och registrera databasen för semantisk språkstatistik.

Avgöra vilka dokumenttyper som kan indexeras

Fråga katalogvyn sys.fulltext_document_types (Transact-SQL).

Om den dokumenttyp som du vill indexeras inte finns i listan över typer som stöds kan du behöva leta upp, ladda ned och installera ytterligare filter. Mer information finns i Visa eller Ändra registrerade filter och ordbrytare.

Bästa praxis: Skapa en separat filgrupp för fulltext- och semantiska index

Överväg att skapa en separat filgrupp för fulltext- och semantiska index om diskutrymmesallokering är ett problem. Semantiska index skapas i samma filgrupp som fulltextindexet. Ett fullständigt ifyllt semantiskt index kan innehålla stora mängder data.

Problem: Sökning i en specifik kolumn returnerar inga resultat

Angavs en icke-Unicode LCID för ett Unicode-språk?

Det är möjligt att aktivera semantisk indexering för en kolumntyp som inte är Unicode med en LCID för ett språk som bara har Unicode-ord, till exempel LCID 1049 för ryska. I det här fallet returneras aldrig några resultat från semantiska index i den här kolumnen.