Delen via


Vul indexen Full-Text in

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Het maken en onderhouden van een volledige tekstindex omvat het vullen van de index met behulp van een proces dat een populatieproces wordt genoemd (ook wel een verkenningsprocesgenoemd).

Typen populatie

Een volledige-tekstindex ondersteunt de volgende typen populaties:

  • volledige populatie
  • Automatische of handmatige populatie op basis van wijzigingen bijhouden
  • Incrementele populatie op basis van een tijdstempel

Volledige populatie

Tijdens een volledige populatie worden indexvermeldingen gemaakt voor alle rijen van een tabel of geïndexeerde weergave. Een volledige populatie van een volledige-tekstindex, bouwt indexvermeldingen voor alle rijen van de basistabel of geïndexeerde weergave.

Sql Server vult standaard een nieuwe volledige-tekstindex in zodra deze is gemaakt.

  • Aan de ene kant kan een volledige populatie een aanzienlijke hoeveelheid resources verbruiken. Daarom is het bij het maken van een index in volledige tekst tijdens piekperioden vaak een best practice om de volledige populatie uit te stellen tot een daltijd, met name als de basistabel van een index in volledige tekst groot is.
  • Aan de andere kant is de volledige tekstcatalogus waartoe de index behoort niet bruikbaar totdat alle volledige-tekstindexen zijn ingevuld.

Als u een volledige-tekstindex wilt maken zonder deze onmiddellijk in te vullen, geeft u de CHANGE_TRACKING OFF, NO POPULATION component op in de CREATE FULLTEXT INDEX-instructie. Als u CHANGE_TRACKING MANUALopgeeft, vult de Full-Text Engine de nieuwe volledige-tekstindex pas in als u een ALTER FULLTEXT INDEX-instructie uitvoert met behulp van de START FULL POPULATION- of START INCREMENTAL POPULATION-clausule.

Voorbeeld: een volledige-tekstindex maken zonder een volledige populatie uit te voeren

In het volgende voorbeeld wordt een volledige-tekstindex gemaakt in de Production.Document tabel van de AdventureWorks voorbeelddatabase. In dit voorbeeld wordt WITH CHANGE_TRACKING OFF, NO POPULATION gebruikt om de eerste volledige populatie uit te stellen.

CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);  
CREATE FULLTEXT CATALOG AW_Production_FTCat;  
CREATE FULLTEXT INDEX ON Production.Document  
(  
    Document                         --Full-text index column name   
        TYPE COLUMN FileExtension    --Name of column that contains file type information  
        Language 1033                 --1033 is LCID for the English language  
)  
    KEY INDEX ui_ukDoc  
    ON AW_Production_FTCat  
    WITH CHANGE_TRACKING OFF, NO POPULATION;  
GO  
  

Voorbeeld: een volledige populatie uitvoeren op een tabel

In het volgende voorbeeld wordt een volledige populatie uitgevoerd op de Production.Document tabel van de AdventureWorks voorbeelddatabase.

ALTER FULLTEXT INDEX ON Production.Document  
   START FULL POPULATION;  

Populatie op basis van wijzigingen bijhouden

U kunt het bijhouden van wijzigingen desgewenst gebruiken om een volledige-tekstindex te onderhouden na de oorspronkelijke volledige populatie. Er is een kleine overhead gekoppeld aan het bijhouden van wijzigingen, omdat SQL Server een tabel onderhoudt waarin wijzigingen in de basistabel worden bijgehouden sinds de laatste populatie. Wanneer u wijzigingen bijhouden gebruikt, houdt SQL Server een record bij van de rijen in de basistabel of geïndexeerde weergave die zijn gewijzigd door updates, verwijderingen of invoegingen. Wijzigingen in gegevens die zijn aangebracht via WRITETEXT en UPDATETEXT, worden niet doorgevoerd in de volledige-tekst index en worden ook niet vastgelegd met wijzigingsdetectie.

Notitie

Voor tabellen met een tijdstempel kolom kunt u incrementele populaties gebruiken in plaats van wijzigingen bijhouden.

Wanneer u wijzigingen bijhouden inschakelt tijdens het maken van de index, vult SQL Server de nieuwe volledige-tekstindex volledig in nadat deze is gemaakt. Daarna worden wijzigingen bijgehouden en doorgegeven aan de volledige-tekstindex.

Wijzigingen bijhouden inschakelen

Er zijn twee soorten wijzigingsregistratie:

  • Automatisch (optieCHANGE_TRACKING AUTO). Automatisch bijhouden van wijzigingen is het standaardgedrag.
  • Handmatig (CHANGE_TRACKING MANUAL optie).

Het type wijzigingen bijhouden bepaalt als volgt hoe de volledige-tekstindex wordt ingevuld:

  • Automatische populatie-

    Volgens de standaardinstelling, of als u CHANGE_TRACKING AUTOopgeeft, gebruikt de Full-Text Engine automatische populatie op de volledige tekstindex. Nadat de initiële volledige populatie is voltooid, worden wijzigingen bijgehouden als gegevens worden gewijzigd in de basistabel en worden de bijgehouden wijzigingen automatisch doorgegeven. De volledige-tekstindex wordt op de achtergrond bijgewerkt; hierdoor worden doorgevoerde wijzigingen mogelijk niet direct in de index weerspiegeld.

    Om te beginnen met het bijhouden van wijzigingen met automatische invulling

    voorbeeld: een volledige-tekstindex wijzigen om automatische wijzigingen bij te houden
    In het volgende voorbeeld wordt de volledige tekstindex van de HumanResources.JobCandidate-tabel in de AdventureWorks-voorbeeldendatabase aangepast om gebruik te maken van wijzigingsbijhouden met automatische populatie.

    USE AdventureWorks;  
    GO  
    ALTER FULLTEXT INDEX ON HumanResources.JobCandidate SET CHANGE_TRACKING AUTO;  
    GO   
    
  • handmatige invoer

    Als u CHANGE_TRACKING HANDMATIG opgeeft, maakt de Full-Text Engine gebruik van handmatige populatie voor de volledige tekst-index. Nadat de initiële volledige populatie is voltooid, worden wijzigingen bijgehouden wanneer gegevens in de basistabel worden gewijzigd. Ze worden echter pas doorgegeven aan de full-text index als u de instructie ALTER FULLTEXT INDEX ... START UPDATE POPULATION uitvoert. U kunt SQL Server Agent gebruiken om deze Transact-SQL instructie periodiek aan te roepen.

    Om te beginnen met het bijhouden van wijzigingen met handmatige invoer

    voorbeeld: een volledige-tekstindex maken met handmatige wijzigingen bijhouden
    In het volgende voorbeeld wordt een volledige tekstindex gemaakt die wijzigingstracering gebruikt met handmatige populatie op de HumanResources.JobCandidate-tabel van de voorbeeld database AdventureWorks.

    USE AdventureWorks;  
    GO  
    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 CHANGE_TRACKING=MANUAL;  
    GO  
    

    voorbeeld: een handmatige populatie uitvoeren
    In het volgende voorbeeld wordt een handmatige opvulling uitgevoerd op de bijgehouden volledige tekstindex van de tabel HumanResources.JobCandidate van de AdventureWorks voorbeelddatabase.

    USE AdventureWorks;  
    GO  
    ALTER FULLTEXT INDEX ON HumanResources.JobCandidate START UPDATE POPULATION;  
    GO  
    

Bijhouden van wijzigingen uitschakelen

Incrementele populatie op basis van een tijdstempel

Een incrementele populatie is een alternatief mechanisme voor het handmatig vullen van een volledige-tekstindex. Als een tabel een groot aantal invoegingen ondervindt, kan het gebruik van incrementele populatie efficiënter zijn met behulp van handmatige populatie.

U kunt een incrementele populatie uitvoeren voor een volledige tekstindex waarvoor CHANGE_TRACKING is ingesteld op HANDMATIG of UIT.

De vereiste voor incrementele populatie is dat de geïndexeerde tabel een kolom moet hebben van het tijdstempel gegevenstype. Als er geen tijdstempel kolom bestaat, kan incrementele populatie niet worden uitgevoerd.

SQL Server gebruikt de tijdstempel kolom om rijen te identificeren die zijn gewijzigd sinds de laatste populatie. De incrementele populatie werkt vervolgens de volledige-tekstindex bij voor rijen die zijn toegevoegd, verwijderd of gewijzigd na de laatste populatie of terwijl de laatste populatie wordt uitgevoerd. Aan het einde van een populatie registreert de Full-Text Engine een nieuwe tijdstempelwaarde. Deze waarde is de grootste tijdstempel waarde die SQL Gatherer heeft gevonden. Deze waarde wordt gebruikt wanneer de volgende incrementele populatie begint.

In sommige gevallen resulteert de aanvraag voor een incrementele populatie in een volledige populatie.

  • Een aanvraag voor incrementele populatie in een tabel zonder een tijdstempel kolom resulteert in een volledige populatiebewerking.
  • Als de eerste populatie van een volledige-tekstindex een incrementele populatie is, indexeert deze alle rijen, waardoor deze gelijk is aan een volledige populatie.
  • Als metagegevens die van invloed zijn op de volledige-tekstindex voor de tabel sinds de laatste populatie zijn gewijzigd, worden incrementele populatieaanvragen geïmplementeerd als volledige populaties. Dit omvat metagegevenswijzigingen die worden veroorzaakt door het wijzigen van kolom-, index- of volledige-tekstindexdefinities.

Een incrementele populatie activeren

Als u een incrementele populatie wilt uitvoeren, voert u een ALTER FULLTEXT INDEX statement uit met de START INCREMENTAL POPULATION-clausule.

Een schema voor incrementele populatie maken of wijzigen

  1. Vouw in Management Studio in Objectverkenner de server uit.

  2. Vouw Databasesuit en vouw vervolgens de database met de volledige-tekstindex uit.

  3. Vouw tabellenuit.

    Klik met de rechtermuisknop op de tabel waarop de volledige-tekstindex is gedefinieerd, selecteer Full-Text indexen klik in het contextmenu van de Full-Text index op Eigenschappen. Hiermee opent u de eigenschappen van de volledige tekstindex dialoogvenster.

    Belangrijk

    Als de basistabel of -weergave geen kolom van het tijdstempel gegevenstype bevat, is incrementele populatie niet mogelijk.

  4. In het deelvenster Selecteer een pagina, selecteer Planningen.

    Op deze pagina kunt u planningen maken of beheren voor een SQL Server Agent-taak waarmee een incrementele tabelpopulatie wordt gestart in de basistabel of geïndexeerde weergave van de volledige-tekstindex.

    De opties zijn als volgt:

    • Als u een nieuwe planning wilt maken, klikt u op Nieuwe.

      Hiermee opent u het dialoogvenster Nieuw Full-Text Tabelschema indexeren, waarin u een planning kunt maken. Als u de planning wilt opslaan, klikt u op OK.

      Belangrijk

      Een SQL Server Agent-taak (Incrementele tabelpopulatie starten op database_name.table_name) is gekoppeld aan een nieuw schema nadat u het dialoogvenster Full-Text Indexeigenschappen hebt afgesloten. Als u meerdere planningen voor dezelfde volledige-tekstindex maakt, gebruiken ze allemaal dezelfde taak.

    • Als u een bestaande planning wilt wijzigen, selecteert u het bestaande schema en klikt u op Bewerken.

      Hiermee opent u het dialoogvenster Nieuw Full-Text Tabelschema indexeren, waar u de planning kunt wijzigen.

      Notitie

      Zie Een taakwijzigen voor meer informatie over het wijzigen van een SQL Server Agent-taak.

    • Als u een bestaand schema wilt verwijderen, selecteert u de bestaande planning en klikt u op Verwijderen.

  5. Selecteer OK-.

Fouten in een volledige-tekstpopulatie oplossen (verkenning)

Wanneer er een fout optreedt tijdens een crawl, creëert en onderhoudt de Full-Text zoekcrawllogboekfaciliteit een crawllogboek, een tekstbestand zonder opmaak. Elk verkenningslogboek komt overeen met een bepaalde volledige-tekstcatalogus. Verkenningslogboeken voor een bepaald exemplaar (in dit voorbeeld het standaardexemplaar) bevinden zich standaard in map %ProgramFiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\LOG.

Het verkenningslogboekbestand volgt het volgende naamgevingsschema:

SQLFT<DatabaseID><FullTextCatalogID>.LOG[<n>]

De variabele onderdelen van de naam van het verkenningslogboekbestand zijn het volgende.

  • < DatabaseID-> : de id van een database. < dbid -> is een getal van vijf cijfers met voorloopnullen.
  • < FullTextCatalogID> - Catalogus-id voor volledige tekst. < catid> is een getal van vijf cijfers met voorloopnullen.
  • < n> - Is een geheel getal dat aangeeft dat een of meer verkenningslogboeken van dezelfde catalogus voor volledige tekst bestaan.

SQLFT0000500008.2 is bijvoorbeeld het verkenningslogboekbestand voor een database met database-id = 5 en catalogus-id voor volledige tekst = 8. De 2 aan het einde van de bestandsnaam geeft aan dat er twee verkenningslogboekbestanden voor dit database-/cataloguspaar zijn.

Zie ook

sys.dm_fts_index_population (Transact-SQL)
Aan de slag met Full-Text Search-
Full-Text indexen maken en beheren
FULLTEXT INDEX (Transact-SQL) maken
WIJZIG VOLLEDIGTEKSTINDEX (Transact-SQL)