Volledige-tekstindexen maken en beheren
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
In dit artikel wordt beschreven hoe u indexen in volledige tekst maakt, vult en beheert in SQL Server.
Een catalogus met volledige tekst maken
Voordat u een volledige-tekstindex kunt maken, moet u een catalogus met volledige tekst hebben. De catalogus is een virtuele container voor een of meer volledige-tekstindexen. Zie Full-Text Catalogi maken en beherenvoor meer informatie.
Een volledige-tekstindex maken, wijzigen of verwijderen
- MAAK DE FULLTEXT INDEX (Transact-SQL)
- ALTER FULLTEXT INDEX (Transact-SQL)
- DROP FULLTEXT INDEX (Transact-SQL)
Een volledige-tekstindex vullen
Het proces voor het maken en onderhouden van een volldedigteksindex wordt een populatie genoemd (ook wel een crawlgenoemd). Er zijn drie typen volledige-tekstindexpopulatie:
- Volledige populatie
- Populatie op basis van wijzigingen bijhouden
- Incrementele populatie op basis van een tijdstempel.
Voor meer informatie, zie Full-Text Indicesvullen.
De eigenschappen van een volledige-tekstindex weergeven
De eigenschappen van een volledige-tekstindex weergeven met Transact-SQL
Catalogus- of dynamische beheerweergave | Beschrijving |
---|---|
sys.fulltext_index_catalog_usages (Transact-SQL) | Retourneert een rij voor elke verwijzing van een volledige tekstcatalogus naar een volledige tekst-index. |
sys.fulltext_index_columns (Transact-SQL) | Bevat een rij voor elke kolom die deel uitmaakt van een volledige-tekstindex. |
sys.fulltext_index_fragments (Transact-SQL) | Een fulltext-index maakt gebruik van interne tabellen met de naam indexfragmenten voor volledige tekst om de omgekeerde indexgegevens op te slaan. Deze weergave kan worden gebruikt om een query uit te voeren op de metagegevens over deze fragmenten. Deze weergave bevat een rij voor elk indexfragment in volledige tekst in elke tabel die een volledige-tekstindex bevat. |
sys.fulltext_indexes (Transact-SQL) | Bevat een rij per volledige tekstindex van een tabelobject. |
sys.dm_fts_index_keywords (Transact-SQL) | Retourneert informatie over de inhoud van een volledige-tekstindex voor de opgegeven tabel. |
sys.dm_fts_index_keywords_by_document (Transact-SQL) | Retourneert informatie over de inhoud op documentniveau van een volledige-tekstindex voor de opgegeven tabel. Een bepaald trefwoord kan in verschillende documenten worden weergegeven. |
sys.dm_fts_index_population (Transact-SQL) | Retourneert informatie over de indexpopulaties in volledige tekst die momenteel worden uitgevoerd. |
De eigenschappen van een volledige-tekstindex weergeven met SQL Server Management Studio
Notitie
Als u eigenschappen van volledige-tekstindexen voor Azure SQL-databases wilt weergeven, gebruikt u Transact-SQL-.
Vouw in SQL Server 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 index, en selecteer in het contextmenu van de Full-Text index de optie Eigenschappen. Hiermee opent u het dialoogvenster Eigenschappen van de volledige tekstindex.
In het deelvenster Selecteer een pagina, kunt u een van de volgende pagina's selecteren:
Bladzijde Beschrijving Algemeen Geeft de basiseigenschappen van de volledige-tekstindex weer. Deze omvatten verschillende wijzigbare eigenschappen en veel onveranderbare eigenschappen, zoals databasenaam, tabelnaam en de naam van de kolom met volledige tekstsleutels. De wijzigbare eigenschappen zijn:
Full-Text Index-stoplijst
Full-Text indexering ingeschakeld
Wijzigingen Bijhouden
Zoek Eigenschappenlijstkolommen Geeft de tabelkolommen weer die beschikbaar zijn voor indexering in volledige tekst. De geselecteerde kolom of kolommen zijn geïndexeerd in volledige tekst. U kunt zo veel van de beschikbare kolommen selecteren als u wilt opnemen in de volledige-tekstindex. Voor meer informatie, zie Full-Text Indexenvullen. planningen Op deze pagina kunt u planningen maken of beheren voor een SQL Server Agent-taak waarmee een incrementele tabelpopulatie wordt gestart voor de volledige-tekstindexpopulaties. Zie Full-Text Indexenvullen voor meer informatie.
Opmerking: nadat u het dialoogvenster Full-Text Indexeigenschappen hebt afgesloten, wordt een zojuist gemaakte planning gekoppeld aan een SQL Server Agent-taak (incrementele tabelpopulatie starten op database_name.table_name).Selecteer OK- om eventuele wijzigingen op te slaan en het dialoogvenster Eigenschappen van de volledige tekstindex te sluiten.
De eigenschappen van geïndexeerde tabellen en kolommen weergeven
Verschillende Transact-SQL functies zoals OBJECTPROPERTYEX kunnen worden gebruikt om de waarde van verschillende indexeringseigenschappen in volledige tekst te verkrijgen. Deze informatie is handig voor het beheren en oplossen van problemen met zoeken in volledige tekst.
De volgende tabel bevat de eigenschappen voor volledige tekst die betrekking hebben op geïndexeerde tabellen en kolommen en hun gerelateerde Transact-SQL functies.
Eigenschap | Beschrijving | Functie |
---|---|---|
FullTextTypeColumn | TYPE COLUMN in de tabel met de documenttypegegevens van de kolom. | COLUMNPROPERTY- |
IsFulltextIndexed | Of een kolom is ingeschakeld voor indexering in volledige tekst. | COLUMNPROPERTY |
IsFulltextKey | Of de index een volledige tekstsleutel voor een tabel is. | INDEXPROPERTY |
TableFulltextBackgroundUpdateIndexOn | Of een tabel full-text indexering op de achtergrond heeft. | OBJECTPROPERTYEX- |
TableFulltextCatalogId | Volledige-tekstcatalogus-ID waarin de volledige-tekstindexgegevens voor de tabel zich bevinden. | OBJECTPROPERTYEX |
VolgwijzigingenVolledigeTekstAan- | Of voor een tabel het bijhouden van wijzigingen in volledige tekst is ingeschakeld. | OBJECTPROPERTYEX |
VerwerkteVolledigeTekstDocumentenTabel | Het aantal rijen dat is verwerkt sinds het begin van indexering in volledige tekst. | OBJECTPROPERTYEX |
TableFulltextFailCount | Aantal rijen dat Full-Text Search niet heeft geïndexeerd. | OBJECTPROPERTYEX |
TableFulltextItemCount- | Aantal rijen dat met succes was geïndexeerd in volledige tekst. | OBJECTPROPERTYEX |
TableVolledigeTekstSleutelKolom | De kolom-id van de unieke sleutelkolom in volledige tekst. | OBJECTPROPERTYEX |
TableFullTextMergeStatus | Of een tabel met een volledige-tekstindex momenteel wordt samengevoegd. | OBJECTPROPERTYEX |
TableFulltextPendingChanges | Aantal in behandeling zijnde vermeldingen voor het bijhouden van wijzigingen die moeten worden verwerkt. | OBJECTPROPERTYEX |
TableFulltextPopulateStatus | De status van de populatie in een volledige teksttabel. | OBJECTPROPERTYEX |
TabelHeeftActieveVolledigeTekstindex | Of een tabel een actieve volledige-tekstindex heeft. | OBJECTPROPERTYEX |
Informatie ophalen over de sleuteldkolom met volledige tekst
Normaal gesproken moet het resultaat van de functies met rijensetwaarde CONTAINSTABLE of FREETEXTTABLE worden gekoppeld aan de basistabel. In dergelijke gevallen moet u de naam van de unieke sleutelkolom weten. U kunt nagaan of een bepaalde unieke index wordt gebruikt als de volledige-tekstsleutel, en u kunt de identificatie van de kolom met de volledige-tekstsleutel verkrijgen.
Bepalen of een bepaalde unieke index wordt gebruikt als de kolom met volledige tekstsleutels
Gebruik een SELECT-instructie om de functie INDEXPROPERTY aan te roepen. Gebruik in de functie-aanroep de OBJECT_ID functie om de naam van de tabel (table_name) te converteren naar de tabel-id, geef de naam van een unieke index voor de tabel op en geef als volgt de IsFulltextKey indexeigenschap op:
SELECT INDEXPROPERTY(OBJECT_ID('table_name'), 'index_name', 'IsFulltextKey');
Deze instructie retourneert 1 als de index wordt gebruikt voor het afdwingen van de uniekheid van de kolom met volledige tekstsleutels en 0 als dat niet zo is.
Voorbeeld
In het volgende voorbeeld wordt aangegeven of de PK_Document_DocumentNode
index wordt gebruikt om de uniekheid van de kolom met volledige tekstsleutels als volgt af te dwingen:
USE AdventureWorks2022;
GO
SELECT INDEXPROPERTY(OBJECT_ID('Production.Document'), 'PK_Document_DocumentNode', 'IsFulltextKey');
In dit voorbeeld wordt 1 geretourneerd als de PK_Document_DocumentNode
index wordt gebruikt om uniekheid van de kolom met volledige tekst af te dwingen. Anders wordt 0 of NULL geretourneerd. NULL impliceert dat u een ongeldige indexnaam gebruikt, de indexnaam komt niet overeen met de tabel, de tabel bestaat niet, enzovoort.
De id van de kolom met volledige tekstsleutel zoeken
Elke tabel met volledige tekst heeft een kolom die wordt gebruikt om unieke rijen af te dwingen voor de tabel (de unieke sleutelkolom). De eigenschap TableFulltextKeyColumn, verkregen uit de functie OBJECTPROPERTYEX, bevat de kolom-id van de unieke sleutelkolom.
Als u deze id wilt verkrijgen, kunt u een SELECT-instructie gebruiken om de functie OBJECTPROPERTYEX aan te roepen. Gebruik de functie OBJECT_ID om de naam van de tabel (table_name) te converteren naar de tabel-id en geef als volgt de eigenschap TableFulltextKeyColumn op:
SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFulltextKeyColumn' ) AS 'Column Identifier';
Voorbeelden
In het volgende voorbeeld wordt de id van de kolom met volledige tekst of NULL geretourneerd. NULL impliceert dat u een ongeldige indexnaam gebruikt, dat de indexnaam niet overeenkomt met de tabel, dat de tabel niet bestaat, enzovoort.
USE AdventureWorks2022;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn');
GO
In het volgende voorbeeld ziet u hoe u de identifier van de unieke sleutelkolom gebruikt om de naam van die kolom te verkrijgen.
USE AdventureWorks2022;
GO
DECLARE @key_column SYSNAME
SET @key_column = COL_NAME(OBJECT_ID('Production.Document'),
OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn'));
SELECT @key_column AS 'Unique Key Column';
GO
In dit voorbeeld wordt een kolom met resultatensets geretourneerd met de naam Unique Key Column
, waarin één rij wordt weergegeven met de naam van de unieke sleutelkolom van de tabel Document, DocumentNode. Als deze query een ongeldige indexnaam bevat, komt de indexnaam niet overeen met de tabel, bestaat de tabel niet, enzovoort, dan wordt NULL geretourneerd.
Index varbinary(max) en XML-kolommen
Als een varbinary(max), varbinaireof xml- kolom is geïndexeerd in volledige tekst, kan deze worden opgevraagd met behulp van de predicaten voor volledige tekst (CONTAINS en FREETEXT) en functies (CONTAINSTABLE en FREETEXTTABLE), zoals elke andere geïndexeerde kolom met volledige tekst.
Index varbinary(max) of varbinaire gegevens
Eén varbinary(max) of varbinaire kolom kan veel soorten documenten opslaan. SQL Server ondersteunt elk documenttype waarvoor een filter is geïnstalleerd en beschikbaar is in het operationele systeem. Het documenttype van elk document wordt aangeduid met de bestandsextensie van het document. Voor een .doc bestandsextensie gebruikt zoeken in volledige tekst bijvoorbeeld het filter dat Ondersteuning biedt voor Microsoft Word-documenten. Voor een lijst met beschikbare documenttypen voert u een query uit op de sys.fulltext_document_types catalogusweergave.
De Full-Text Engine kan bestaande filters gebruiken die in het besturingssysteem zijn geïnstalleerd. Voordat u besturingssysteemfilters, woordonderbrekers en stemmers kunt gebruiken, moet u deze in de serverinstantie laden als volgt:
EXEC sp_fulltext_service @action = 'load_os_resources', @value = 1;
Als u een volledige-tekstindex wilt maken op een varbinary(max) kolom, moet de Full-Text Engine toegang hebben tot de bestandsextensies van de documenten in de varbinary(max) kolom. Deze informatie moet worden opgeslagen in een tabelkolom, een zogenaamde typekolom, die moet worden gekoppeld aan de varbinary(max) kolom in de volledige-tekstindex. Bij het indexeren van een document gebruikt de Full-Text Engine de bestandsextensie in de typekolom om te bepalen welk filter moet worden gebruikt.
XML-gegevens indexeren
Een kolom met xml- gegevenstype slaat alleen XML-documenten en -fragmenten op en alleen het XML-filter wordt gebruikt voor de documenten. Daarom is een typekolom niet nodig. In xml- kolommen indexeert de volledige-tekstindex de inhoud van de XML-elementen, maar negeert de XML-opmaak. Kenmerkwaarden zijn geïndexeerd in volledige tekst, tenzij ze numerieke waarden zijn. Elementtags worden gebruikt als tokengrenzen. Goed opgemaakte XML- of HTML-documenten en -fragmenten met meerdere talen worden ondersteund.
Voor meer informatie over het indexeren en uitvoeren van query's op een xml- kolom, zie Full-Text zoeken met XML-kolommen.
Indexering in volledige tekst voor een tabel uitschakelen of opnieuw inschakelen
In SQL Server zijn alle door de gebruiker gemaakte databases standaard ingeschakeld voor volledige tekst. Daarnaast wordt een afzonderlijke tabel automatisch ingeschakeld voor indexering in volledige tekst zodra er een volledige-tekstindex wordt gemaakt en er een kolom aan de index wordt toegevoegd. Een tabel wordt automatisch uitgeschakeld voor indexering in volledige tekst wanneer de laatste kolom wordt verwijderd uit de volledige-tekstindex.
In een tabel met een volledige-tekstindex kunt u een tabel handmatig uitschakelen of opnieuw inschakelen voor indexering in volledige tekst met behulp van SQL Server Management Studio.
Vouw de servergroep uit, vouw Databasesuit en vouw de database uit die de tabel bevat die u wilt inschakelen voor indexering in volledige tekst.
Vouw tabellenuit en klik met de rechtermuisknop op de tabel die u wilt uitschakelen of opnieuw inschakelen voor indexering in volledige tekst.
Selecteer Full-Text indexen selecteer Full-Text index uitschakelen of Full-Text indexinschakelen.
Een volledige-tekstindex uit een tabel verwijderen
Klik in Objectverkenner met de rechtermuisknop op de tabel met de volledige-tekstindex die u wilt verwijderen.
Selecteer verwijder Full-Text index.
Wanneer u hierom wordt gevraagd, selecteert u OK om te bevestigen dat u de volledige tekstindex wilt verwijderen.