Delen via


Semantisch zoeken inschakelen voor tabellen en kolommen

van toepassing op:SQL Server-

Hierin wordt beschreven hoe u statistische semantische indexering inschakelt of uitschakelt voor geselecteerde kolommen die documenten of tekst bevatten.

Statistische semantische zoekopdracht maakt gebruik van de indexen die zijn gemaakt door Full-Text Search en maakt extra indexen. Als gevolg van deze afhankelijkheid van zoeken in volledige tekst maakt u een nieuwe semantische index wanneer u een nieuwe volledige-tekstindex definieert of wanneer u een bestaande volledige-tekstindex wijzigt. U kunt een nieuwe semantische index maken met behulp van Transact-SQL instructies of met behulp van de wizard Full-Text Indexeren en andere dialoogvensters in SQL Server Management Studio, zoals beschreven in dit artikel.

Een semantische index maken

Vereisten en beperkingen voor het maken van een semantische index

  • U kunt een index maken voor alle databaseobjecten die worden ondersteund voor indexering in volledige tekst, inclusief tabellen en geïndexeerde weergaven.

  • Voordat u semantische indexering voor specifieke kolommen kunt inschakelen, moeten de volgende vereisten bestaan:

    • Er moet een volledige tekstcatalogus voor de database bestaan.

    • De tabel moet een volledige-tekstindex hebben.

    • De geselecteerde kolommen moeten deelnemen aan de volledige-tekstindex.

    U kunt al deze vereisten tegelijkertijd maken en inschakelen.

  • U kunt een semantische index maken voor kolommen met een van de gegevenstypen die worden ondersteund voor indexering in volledige tekst. Zie Full-Text Indexen maken en beherenvoor meer informatie.

  • U kunt elk documenttype opgeven dat wordt ondersteund voor indexering in volledige tekst voor varbinary(max) kolommen. Zie Procedure: Bepalen welke documenttypen kunnen worden geïndexeerd in dit artikel voor meer informatie.

  • Met semantische indexering worden twee typen indexen gemaakt voor de kolommen die u selecteert: een index van sleuteltermen en een index van documentsimilariteit. U kunt niet slechts één type index of het andere selecteren wanneer u semantische indexering inschakelt. U kunt echter onafhankelijk van elkaar query's uitvoeren op deze twee indexen. Zie Sleuteltermen zoeken in documenten met Semantische zoekopdrachten en Vergelijkbare en verwante documenten zoeken met Semantische zoekopdrachtenvoor meer informatie.

  • Als u geen LCID expliciet opgeeft voor een semantische index, worden alleen de primaire taal en de bijbehorende taalstatistieken gebruikt voor semantische indexering.

  • Als u een taal opgeeft voor een kolom waarvoor het taalmodel niet beschikbaar is, mislukt het maken van de index en wordt er een foutbericht geretourneerd.

Een semantische index maken wanneer er geen volledige-tekstindex is

Wanneer u een nieuwe volledige-tekstindex met de CREATE FULLTEXT INDEX-instructie maakt, kunt u semantische indexering op kolomniveau inschakelen door het trefwoord STATISTICAL_SEMANTICS op te geven als onderdeel van de kolomdefinitie. U kunt semantische indexering ook inschakelen wanneer u de wizard Full-Text Indexeren gebruikt om een nieuwe volledige-tekstindex te maken.

Een nieuwe semantische index maken met behulp van Transact-SQL

Roep de CREATE FULLTEXT INDEX-instructie aan en geef STATISTICAL_SEMANTICS op voor elke kolom waarop u een semantische index wilt maken. Zie CREATE FULLTEXT INDEX (Transact-SQL)voor meer informatie over alle opties voor deze instructie.

Voorbeeld 1: Een unieke index, een volledige-tekstindex en een semantische index maken

In het volgende voorbeeld wordt een standaardcatalogus met volledige tekst gemaakt, ft. In het voorbeeld wordt vervolgens een unieke index gemaakt in de kolom JobCandidateID van de HumanResources.JobCandidate tabel van de AdventureWorks2022 voorbeelddatabase. Deze unieke index is vereist als sleutelkolom voor een volledige tekstindex. In het voorbeeld wordt vervolgens een volledige-tekstindex en een semantische index in de kolom Resume gemaakt.

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

Voorbeeld 2: Een volledige tekst- en semantische index maken op verschillende kolommen met vertraagde indexpopulatie

In het volgende voorbeeld wordt een volledige tekstcatalogus gemaakt, documents_catalog, in de AdventureWorks2022 voorbeelddatabase. In het voorbeeld wordt vervolgens een volledige-tekstindex gemaakt die gebruikmaakt van deze nieuwe catalogus. De volledige-tekstindex wordt gemaakt op de Title, DocumentSummaryen Document kolommen van de Production.Document tabel, terwijl de semantische index alleen in de kolom Document wordt gemaakt. Deze volledige-tekstindex maakt gebruik van de zojuist gemaakte volledige-tekstcatalogus en een bestaande unieke sleutelindex, PK_Document_DocumentID. Zoals aanbevolen, wordt deze indexsleutel gemaakt op een kolom met gehele getallen, DocumentID. In het voorbeeld wordt de LCID voor Engels 1033 opgegeven. Dit is de taal van de gegevens in de kolommen.

In dit voorbeeld wordt ook aangegeven dat het bijhouden van wijzigingen is uitgeschakeld zonder populatie. Later, tijdens daluren, gebruikt het voorbeeld een ALTER FULLTEXT INDEX-instructie om een volledige populatie op de nieuwe index te starten en automatisch bijhouden van wijzigingen in te schakelen.

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

Later wordt de index tijdens de daluren gevuld.

ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO
GO

Een nieuwe semantische index maken met behulp van SQL Server Management Studio

Voer de wizard Full-Text Indexeren uit en schakel statistische semantiek in op de pagina Tabelkolommen selecteren voor elke kolom waarop u een semantische index wilt maken. Zie Gebruik de wizard Full-Text Indexerenvoor meer informatie, waaronder informatie over het starten van de Full-Text Indexeerwizard.

Een semantische index maken wanneer er een bestaande volledige-tekstindex is

U kunt semantische indexering toevoegen wanneer u een bestaande volledige-tekstindex wijzigt met de ALTER FULLTEXT INDEX-instructie. U kunt ook semantische indexering toevoegen met behulp van verschillende dialoogvensters in SQL Server Management Studio.

Een semantische index toevoegen met behulp van Transact-SQL

Roep de ALTER FULLTEXT INDEX-instructie aan met de opties die in de volgende sectie worden beschreven, voor elke kolom waarop u een semantische index wilt toevoegen. Zie ALTER FULLTEXT INDEX (Transact-SQL)voor meer informatie over alle opties voor deze instructie.

Zowel volledige tekst als semantische indexen worden opnieuw ingevuld na een aanroep naar ALTER, tenzij u anders opgeeft.

  • Als u alleen volledige-tekstindexering wilt toevoegen aan een kolom, gebruikt u de syntaxis van de ADD.

  • Als u zowel volledige tekst als semantische indexering wilt toevoegen aan een kolom, gebruikt u de ADD syntaxis met de optie STATISTICAL_SEMANTICS.

  • Als u semantische indexering wilt toevoegen aan een kolom die al is ingeschakeld voor indexering in volledige tekst, gebruikt u de optie ADD STATISTICAL_SEMANTICS. U kunt semantische indexering slechts toevoegen aan één kolom in één ALTER instructie.

Voorbeeld: semantische indexering toevoegen aan een kolom die al volledige-tekstindexering heeft

In het volgende voorbeeld wordt een bestaande full-text index op de Production.Document tabel in de AdventureWorks2022 voorbeelddatabase gewijzigd. In het voorbeeld wordt een semantische index toegevoegd aan de kolom Document van de Production.Document tabel, die al een volledige-tekstindex bevat. In het voorbeeld wordt aangegeven dat de index niet automatisch opnieuw wordt ingevuld.

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

Een semantische index toevoegen met behulp van SQL Server Management Studio

U kunt de kolommen wijzigen die zijn ingeschakeld voor semantische en volledige-tekstindexering op de pagina Full-Text Indexkolommen van het dialoogvenster Full-Text Indexeigenschappen. Zie Manage Full-Text Indexesvoor meer informatie.

Een semantische index wijzigen

Vereisten en beperkingen voor het wijzigen van een bestaande index

  • U kunt een bestaande index niet wijzigen terwijl de populatie van de index wordt uitgevoerd. Zie Semantic Search beheren en bewakenvoor meer informatie over het bewaken van de voortgang van de indexpopulatie.

  • U kunt geen indexering toevoegen aan een kolom en indexering voor dezelfde kolom wijzigen of verwijderen in één aanroep van de ALTER FULLTEXT INDEX-instructie.

Een semantische index verwijderen

U kunt semantische indexering verwijderen wanneer u een bestaande volledige-tekstindex wijzigt met de instructie ALTER FULLTEXT INDEX. U kunt ook semantische indexering verwijderen met behulp van verschillende dialoogvensters in SQL Server Management Studio.

Een semantische index verwijderen met behulp van Transact-SQL

Als u semantische indexering alleen uit een kolom of kolommen wilt verwijderen, roept u de ALTER FULLTEXT INDEX-instructie aan met de optie ALTER COLUMN <column_name> DROP STATISTICAL_SEMANTICS. U kunt de indexering uit meerdere kolommen in één ALTER instructie verwijderen.

USE database_name;
GO

ALTER FULLTEXT INDEX
    ALTER COLUMN column_name
    DROP STATISTICAL_SEMANTICS;
GO

Als u zowel volledige tekst als semantische indexering uit een kolom wilt verwijderen, roept u de ALTER FULLTEXT INDEX-instructie aan met de optie ALTER COLUMN <column_name> DROP.

USE database_name;
GO

ALTER FULLTEXT INDEX
    ALTER COLUMN column_name
    DROP;
GO

Een semantische index verwijderen met SQL Server Management Studio

U kunt de kolommen wijzigen die zijn ingeschakeld voor semantische en volledige-tekstindexering op de pagina Full-Text Indexkolommen van het dialoogvenster Full-Text Indexeigenschappen. Zie Manage Full-Text Indexesvoor meer informatie.

Vereisten en beperkingen voor het verwijderen van een semantische index

  • U kunt indexering van volledige tekst niet verwijderen uit een kolom terwijl u semantische indexering behoudt. Semantische indexering is afhankelijk van indexering in volledige tekst voor resultaten van document vergelijkbaarheid.

  • U kunt de optie NO POPULATION niet opgeven wanneer u semantische indexering verwijdert uit de laatste kolom in een tabel waarvoor semantische indexering is ingeschakeld. Een populatiecyclus is vereist om de resultaten te verwijderen die eerder zijn geïndexeerd.

Controleren of semantisch zoeken is ingeschakeld voor databaseobjecten

Is semantisch zoeken ingeschakeld voor een database?

Voer een query uit op de eigenschap IsFullTextEnabled van de DATABASEPROPERTYEX (Transact-SQL) metagegevensfunctie.

Een retourwaarde van 1 geeft aan dat zoeken in volledige tekst en semantische zoekopdrachten zijn ingeschakeld voor de database. Een retourwaarde van 0 geeft aan dat deze niet zijn ingeschakeld.

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

Is semantisch zoeken ingeschakeld voor een tabel?

Voer een query uit op de eigenschap TableFullTextSemanticExtraction van de OBJECTPROPERTYEX (Transact-SQL) metagegevensfunctie.

Een retourwaarde van 1 geeft aan dat semantische zoekopdracht is ingeschakeld voor de tabel; een retourwaarde van 0 geeft aan dat deze niet is ingeschakeld.

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

Is semantisch zoeken ingeschakeld voor een kolom?

Ga als volgt te werk om te bepalen of semantisch zoeken is ingeschakeld voor een specifieke kolom:

  • Voer een query uit op de eigenschap StatisticalSemantics van de COLUMNPROPERTY (Transact-SQL) metagegevensfunctie.

    Een retourwaarde van 1 geeft aan dat semantische zoekopdracht is ingeschakeld voor de kolom; een retourwaarde van 0 geeft aan dat deze niet is ingeschakeld.

    SELECT COLUMNPROPERTY(OBJECT_ID('table_name'), 'column_name', 'StatisticalSemantics');
    GO
    
  • Vraag de catalogusweergave sys.fulltext_index_columns (Transact-SQL) op voor de volledige tekstindex.

    Een waarde van 1 in de kolom statistical_semantics geeft aan dat de opgegeven kolom is ingeschakeld voor semantische indexering, naast indexering in volledige tekst.

    SELECT * FROM sys.fulltext_index_columns
    WHERE object_id = OBJECT_ID('table_name');
    GO
    
  • Klik in Objectverkenner in Management Studio met de rechtermuisknop op een kolom en selecteer Eigenschappen. Controleer op de pagina Algemeen van het dialoogvenster Kolomeigenschappen de waarde van de eigenschap Statistische semantiek.

    Een waarde van True geeft aan dat de opgegeven kolom is ingeschakeld voor semantische indexering, naast indexering in volledige tekst.

Controleren welke talen worden ondersteund voor semantische zoekopdrachten

Er worden minder talen ondersteund voor semantische indexering dan voor indexering in volledige tekst. Als gevolg hiervan kunnen er kolommen zijn die u kunt indexeren voor zoekopdrachten in volledige tekst, maar niet voor semantische zoekopdrachten.

Voer een query uit voor de catalogusweergave sys.fulltext_semantic_languages (Transact-SQL).

SELECT * FROM sys.fulltext_semantic_languages;
GO

De volgende talen worden ondersteund voor semantische indexering. Deze lijst vertegenwoordigt de uitvoer van de catalogusweergave sys.fulltext_semantic_languages (Transact-SQL), gesorteerd door LCID.

Taal LCID
Traditioneel Chinees 1028
Duits 1031
Engels (VS) 1033
Frans 1036
Italiaans 1040
Braziliaans 1046
Russisch 1049
Zweeds 1053
Vereenvoudigd Chinees 2052
Brits-Engels 2057
Portugees 2070
Chinees (Hongkong, SAR, Volksrepubliek China) 2070
Spaans 3082
Chinees (Singapore) 4100
Chinees (Macao SAR) 5124

Notitie

Als de resultaten leeg zijn, moet u de Semantic Language Statistics-database downloaden en installeren. Voor meer informatie, zie De Semantic Language Statistics Database installeren, koppelen en registreren.

Bepalen welke documenttypen kunnen worden geïndexeerd

Voer een query uit voor de catalogusweergave sys.fulltext_document_types (Transact-SQL).

Als het documenttype dat u wilt indexeren zich niet in de lijst met ondersteunde typen bevindt, moet u mogelijk extra filters zoeken, downloaden en installeren. Voor meer informatie, zie Geregistreerde filters en Woordafbrekers weergeven of wijzigen.

Best practice: Een afzonderlijke bestandsgroep maken voor de volledige tekst en semantische indexen

Overweeg om een afzonderlijke bestandsgroep te maken voor de volledige tekst en semantische indexen als de toewijzing van schijfruimte een probleem is. De semantische indexen worden gemaakt in dezelfde bestandsgroep als de volledige-tekstindex. Een volledig gevulde semantische index kan grote hoeveelheden gegevens bevatten.

Probleem: zoeken op een specifieke kolom retourneert geen resultaten

Is er een niet-Unicode-LCID opgegeven voor een Unicode-taal?

Het is mogelijk om semantische indexering in te schakelen voor een niet-Unicode-kolomtype met een LCID voor een taal die alleen Unicode-woorden bevat, zoals LCID 1049 voor Russisch. In dit geval worden er nooit resultaten geretourneerd uit de semantische indexen in deze kolom.