Vul indexen Full-Text in
van toepassing op:SQL Server
Azure SQL Database
Azure 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 MANUAL
opgeeft, 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 (optie
CHANGE_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 AUTO
opgeeft, 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
CREATE FULLTEXT INDEX ... MET AUTOMATISCHE BIJWERKING VAN WIJZIGINGEN
ALTER FULLTEXT INDEX ... CHANGE_TRACKING AUTO INSTELLEN
voorbeeld: een volledige-tekstindex wijzigen om automatische wijzigingen bij te houden
In het volgende voorbeeld wordt de volledige tekstindex van deHumanResources.JobCandidate
-tabel in deAdventureWorks
-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
CREATE FULLTEXT INDEX ... MET MANUELE CHANGE_TRACKING
ALTER FULLTEXT INDEX ... HANDMATIG CHANGE_TRACKING INSTELLEN
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 deHumanResources.JobCandidate
-tabel van de voorbeeld databaseAdventureWorks
.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 tabelHumanResources.JobCandidate
van deAdventureWorks
voorbeelddatabase.USE AdventureWorks; GO ALTER FULLTEXT INDEX ON HumanResources.JobCandidate START UPDATE POPULATION; GO
Bijhouden van wijzigingen uitschakelen
CREATE FULLTEXT INDEX ... MET CHANGE_TRACKING UITGESCHAKELD
ALTER FULLTEXT INDEX ... CHANGE_TRACKING UITZETTEN
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
Vouw in Management Studio in Objectverkenner de server uit.
Vouw Databasesuit en vouw vervolgens de database met de volledige-tekstindex uit.
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.
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.
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)