Delen via


MAAK VOLLEDIGE TEKST INDEX AAN (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Maakt een full-text index aan op een tabel of geïndexeerde weergave in een database in SQL Server. Per tabel of geïndexeerde weergave is slechts één volledige tekst toegestaan, en elke volledige tekst index geldt voor één enkele tabel of geïndexeerde weergave. Een volledige tekstindex kan tot 1024 kolommen bevatten.

Transact-SQL syntaxis-conventies

Syntaxis

CREATE FULLTEXT INDEX ON table_name
   [ ( { column_name
             [ TYPE COLUMN type_column_name ]
             [ LANGUAGE language_term ]
             [ STATISTICAL_SEMANTICS ]
        } [ , ...n ]
      ) ]
    KEY INDEX index_name
    [ ON <catalog_filegroup_option> ]
    [ WITH ( <with_option> [ , ...n ] ) ]
[;]

<catalog_filegroup_option>::=
 {
    fulltext_catalog_name
 | ( fulltext_catalog_name , FILEGROUP filegroup_name )
 | ( FILEGROUP filegroup_name , fulltext_catalog_name )
 | ( FILEGROUP filegroup_name )
 }

<with_option>::=
 {
   CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [ , NO POPULATION ] }
 | STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
 | SEARCH PROPERTY LIST [ = ] property_list_name
 }

Arguments

table_name

De naam van de tabel of geïndexeerde weergave die de kolom of kolommen bevat die in de full-text index zijn opgenomen.

column_name

De naam van de kolom die in de volledige tekstindex is opgenomen. Alleen kolommen van het type char, varchar, nchar, nvarchar, text, ntext, image, xml en varbinary(max) kunnen worden geïndexeerd voor full-text zoekopdrachten. Om meerdere kolommen te specificeren, herhaal je de column_name-clausule als volgt:

MAAK VOLLEDIGE TEKSTINDEX AAN OP table_name (column_name1 [...], column_name2 [...]) ...

TYPE KOLOM type_column_name

Geeft de naam van een tabelkolom, type_column_name, aan, die wordt gebruikt om het documenttype voor een varbinary(max) of afbeeldingsdocument te bevatten. Deze kolom, bekend als de typekolom, bevat een door de gebruiker opgegeven bestandsextensie (.doc, .pdf, .xls, enzovoort). De typekolom moet van type char, nchar, varchar of nvarchar zijn.

Specificeer TYPE COLUMN type_column_name alleen als column_name een varbinary(max) of afbeeldingskolom specificeert, waarin gegevens als binaire data worden opgeslagen; anders geeft SQL Server een foutmelding terug.

Opmerking

Tijdens indexering gebruikt de Full-Text Engine de afkorting in de typekolom van elke tabelrij om te bepalen welk full-text zoekfilter gebruikt moet worden voor het document in column_name. Het filter laadt het document als een binaire stroom, verwijdert de opmaakinformatie en stuurt de tekst van het document naar de woordbrekercomponent. Zie Filters configureren en beheren voor zoeken voor meer informatie.

TAAL language_term

De taal van de gegevens die in column_name zijn opgeslagen.

language_term is optioneel en kan worden gespecificeerd als een string, geheel getal of hexadecimale waarde die overeenkomt met de locale identifier (LCID) van een taal. Als er geen waarde is opgegeven, wordt de standaardtaal van de SQL Server-instantie gebruikt.

Als language_term is gespecificeerd, wordt de taal die het vertegenwoordigt gebruikt om gegevens te indexeren die zijn opgeslagen in kolommen char, nchar, varchar, nvarchar, text en ntext . Deze taal is de standaardtaal die wordt gebruikt tijdens het querytijdperk als language_term niet is gespecificeerd als onderdeel van een full-text predicaat tegen de kolom.

Wanneer gespecificeerd als een string, komt language_term overeen met de alias kolomwaarde in de sys.syslanguages systeemtabel. De snaar moet worden omsloten door enkele aanhalingstekens, zoals in 'language_term'. Wanneer dit is opgegeven als een geheel getal, is language_term de werkelijke LCID die de taal identificeert. Wanneer gespecificeerd als een hexadecimale waarde, wordt 0x language_term gevolgd door de hexacademwaarde van de LCID. De hex-waarde mag niet hoger zijn dan acht cijfers, inclusief voorste nullen.

Als de waarde de DBCS-indeling (Double-Byte Character Set) heeft, wordt deze door SQL Server geconverteerd naar Unicode.

Bronnen, zoals woordbrekers en stemmers, moeten ingeschakeld zijn voor de als language_term gespecificeerde taal. Als dergelijke bronnen de opgegeven taal niet ondersteunen, geeft SQL Server een foutmelding.

Gebruik de sp_configure opgeslagen procedure om informatie te benaderen over de standaard full-text taal van de Microsoft SQL Server-instantie. Voor meer informatie, zie sp_configure (Transact-SQL).

Voor niet-BLOB- en niet-XML-kolommen die tekstgegevens in meerdere talen bevatten, of voor gevallen waarin de taal van de tekst die in de kolom is opgeslagen onbekend is, kan het passend zijn om de neutrale (0x0) taalbron te gebruiken. Eerst moet je echter de mogelijke gevolgen begrijpen van het gebruik van de neutrale (0x0) taalbron. Voor informatie over de mogelijke oplossingen en gevolgen van het gebruik van de neutrale (0x0) taalbron, zie Kies een taal bij het maken van een Full-Text Index.

Voor documenten die zijn opgeslagen in XML- of BLOB-kolommen wordt de taalcodering binnen het document gebruikt tijdens indexering. Bijvoorbeeld, in XML-kolommen identificeert het xml:lang attribuut in XML-documenten de taal. Bij het querymoment wordt de eerder in language_term gespecificeerde waarde de standaardtaal die wordt gebruikt voor full-text query's, tenzij language_term als onderdeel van een full-text query wordt opgegeven.

STATISTICAL_SEMANTICS

Van toepassing op: SQL Server (SQL Server 2012 (11.x) en later)

Maakt de extra sleutelzin- en documentovereenkomstindexen die deel uitmaken van statistische semantische indexering. Zie Semantic Search (SQL Server)voor meer informatie.

SLEUTELINDEX index_name

De naam van de unieke sleutelindex op table_name. De KEY INDEX moet een unieke, enkel-sleutel, niet-nulleerbare kolom zijn. Selecteer de kleinste unieke sleutelindex voor de volledige unieke sleutel. Voor de beste prestaties raden we een geheel datatype aan voor de full-text key.

fulltext_catalog_name

De volledige tekstcatalogus die wordt gebruikt voor de volledige tekstindex. De catalogus moet al in de database bestaan. Deze component is optioneel. Als dit niet is gespecificeerd, wordt een standaardcatalogus gebruikt. Als er geen standaardcatalogus bestaat, geeft SQL Server een foutmelding terug.

FILEGROUP-filegroup_name

Maakt de opgegeven full-text index aan op de opgegeven bestandsgroep. De bestandsgroep moet al bestaan. Als de FILEGROUP-clausule niet is gespecificeerd, wordt de volledige tekstindex in dezelfde bestandsgroep geplaatst als de basistabel of weergave voor een niet-gepartitioneerde tabel, of in de primaire bestandsgroep voor een gepartitioneerde tabel.

CHANGE_TRACKING [ = ] { HANDMATIG | AUTO | OFF [ , GEEN BEVOLKING ] }

Geeft aan of wijzigingen (updates, verwijderingen of invoegingen) die zijn aangebracht in tabelkolommen die door de full-text index worden bedekt, door SQL Server naar de full-text index zullen worden doorgegeven. Datawijzigingen via WRITETEXT en UPDATETEXT worden niet weergegeven in de full-text index en worden niet opgepikt met wijzigingstracking.

  • HANDMATIG

    Specificeert dat de gevolgde wijzigingen handmatig moeten worden doorgegeven door de ALTER FULLTEXT INDEX ... START UPDATE POPULATION Transact-SQL statement (handmatige populatie). U kunt SQL Server Agent gebruiken om deze Transact-SQL instructie periodiek aan te roepen.

  • AUTO

    Specificeert dat de gevolgde wijzigingen automatisch worden doorgegeven wanneer gegevens in de basistabel worden aangepast (automatische populatie). Hoewel wijzigingen automatisch worden doorgegeven, worden deze wijzigingen mogelijk niet direct weergegeven in de volledige tekstindex. AUTO is de standaard.

AF [ , GEEN BEVOLKING ]

Geeft aan dat SQL Server geen lijst bijhoudt met wijzigingen in de geïndexeerde data. Wanneer GEEN POPULATIE niet is gespecificeerd, vult SQL Server de index volledig nadat deze is aangemaakt.

De optie GEEN BEVOLKING kan alleen worden gebruikt als CHANGE_TRACKING UIT is. Wanneer GEEN POPULATIE wordt gespecificeerd, vult SQL Server geen index in nadat deze is aangemaakt. De index wordt pas gevuld nadat de gebruiker het ALTER FULLTEXT INDEX commando uitvoert met de clausule START FULL POPULATION of START INCREMENTAL POPULATION.

STOPLIJST [ = ] { UIT | SYSTEEM | stoplist_name }

Koppelt een volledige stoplijst aan de index. De index wordt niet gevuld met tokens die deel uitmaken van de opgegeven stoplijst. Als STOPLIST niet is gespecificeerd, koppelt SQL Server de volledige tekststoplijst van het systeem aan de index.

  • OFF

    Specificeert dat er geen stoplijst is gekoppeld aan de volledige tekstindex.

  • SYSTEM

    Specificeert dat het standaard full-text systeem STOPLIST gebruikt moet worden voor deze full-text index.

  • stoplist_name

    Specificeert de naam van de stoplijst die aan de volledige tekstindex gekoppeld moet worden.

ZOEK PROPERTY LIST [ = ] property_list_name

Van toepassing op: SQL Server (SQL Server 2012 (11.x) en later)

Koppelt een zoekproperty list aan de index.

  • OFF

    Specificeert dat er geen property list is gekoppeld aan de full-text index.

  • property_list_name

    Specificeert de naam van de zoekeigenschapslijst die gekoppeld moet worden aan de full-text index.

Opmerkingen

Op xml-kolommen kun je een full-text index maken die de inhoud van de XML-elementen indexeert, maar de XML-opmaak negeert. Attribuutwaarden worden full-text geïndexeerd, tenzij het numerieke waarden zijn. Elementtags worden gebruikt als tokengrenzen. Goed gevormde XML- of HTML-documenten en fragmenten met meerdere talen worden ondersteund. Zie Full-Text Zoeken met XML-kolommen gebruiken voor meer informatie.

We raden aan dat de indexsleutelkolom een geheel datatype is. Dit biedt optimalisaties tijdens de uitvoering van de query.

CREATE FULLTEXT INDEX kan niet binnen een gebruikerstransactie worden geplaatst. Deze verklaring moet in een eigen impliciete transactie worden uitgevoerd.

Voor meer informatie over full-text indexen, zie Create and Manage Full-Text Indexes.

Interacties van veranderingtracking en NO POPULATION-parameter

Of de full-text index is gevuld hangt af van of change-tracking is ingeschakeld en of ZONDER POPULATIE is gespecificeerd in de ALTER FULLTEXT INDEX-instructie. De volgende tabel vat het resultaat van hun interactie samen.

Change Tracking ZONDER BEVOLKING Resultaat
Niet ingeschakeld Niet opgegeven Een volledige populatie wordt uitgevoerd op de index.
Niet ingeschakeld Gespecificeerd Er komt geen populatie van de index voor totdat een ALTER FULLTEXT INDEX... START BEVOLKINGSVERKLARING wordt uitgegeven.
Ingeschakeld Gespecificeerd Er wordt een fout geactiveerd en de index wordt niet gewijzigd.
Ingeschakeld Niet opgegeven Een volledige populatie wordt uitgevoerd op de index.

Voor meer informatie over het invullen van volledige tekstindexen, zie Populate Full-Text Indexes.

Permissions

De gebruiker moet toestemming hebben REFERENCES voor de full-text catalogus en ALTER rechten voor de tabel of geïndexeerde weergave, of lid zijn van de sysadmin vaste serverrol, of db_owner, of db_ddladmin vaste databaserollen.

Als SET STOPLIST gespecificeerd, moet de gebruiker REFERENTIE-toestemming hebben op de opgegeven stoplijst. De eigenaar van de STOPLIST kan deze toestemming geven.

Opmerking

Het publiek krijgt REFERENTIE-toestemming voor de standaard stoplist die met SQL Server wordt geleverd.

Voorbeelden

Eén. Maak een unieke index, een volledige tekstcatalogus en een volledige tekstindex

Het volgende voorbeeld creëert een unieke index in de JobCandidateID kolom van de HumanResources.JobCandidate tabel van de AdventureWorks2025 voorbeelddatabase. Het voorbeeld maakt vervolgens een standaard full-text catalogus, ft. Ten slotte maakt het voorbeeld een volledige tekstindex op de Resume kolom, met gebruik van de ft catalogus en de systeemstoplijst.

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 STOPLIST = SYSTEM;
GO

B. Maak een full-text index op verschillende tabelkolommen

In het volgende voorbeeld wordt een volledige tekstcatalogus gemaakt, production_catalog, in de AdventureWorks voorbeelddatabase. In het voorbeeld wordt vervolgens een volledige-tekstindex gemaakt die gebruikmaakt van deze nieuwe catalogus. De volledige tekstindex bevindt zich op de ReviewerName, , en Comments kolommen van de Production.ProductReviewEmailAddress. Voor elke kolom specificeert het voorbeeld de LCID van Engels, 1033, wat de taal is van de gegevens in de kolommen. Deze full-text index gebruikt een bestaande unieke sleutelindex, PK_ProductReview_ProductReviewID. Zoals aanbevolen bevindt deze indexsleutel zich op een geheel kolom, ProductReviewID.

CREATE FULLTEXT CATALOG production_catalog;
GO

CREATE FULLTEXT INDEX ON Production.ProductReview (
    ReviewerName LANGUAGE 1033,
    EmailAddress LANGUAGE 1033,
    Comments LANGUAGE 1033
) KEY INDEX PK_ProductReview_ProductReviewID ON production_catalog;
GO

C. Maak een full-text index met een zoek-eigenschapslijst zonder deze te vullen

Het volgende voorbeeld creëert een volledige tekstindex op de Title, DocumentSummary, en Document kolommen van de Production.Document tabel. Het voorbeeld specificeert de LCID van het Engels, 1033, wat de taal is van de gegevens in de kolommen. Deze full-text index gebruikt de standaard full-text catalogus en een bestaande unieke sleutelindex, PK_Document_DocumentID. Zoals aanbevolen bevindt deze indexsleutel zich op een geheel kolom, DocumentID.

Het voorbeeld specificeert de SYSTEM-stoplijst. Het specificeert ook een zoek-eigenschapslijst, DocumentPropertyList; voor een voorbeeld dat deze eigenschapslijst aanmaakt, zie CREATE SEARCH PROPERTY LIST (Transact-SQL).

Het voorbeeld geeft aan dat het volgen van veranderingen niet klopt als er geen populatie is. Later, tijdens de laagste uren, gebruikt het voorbeeld een ALTER FULLTEXT INDEX-instructie om een volledige populatie op de nieuwe index te starten en automatische wijzigingstracking in te schakelen.

CREATE FULLTEXT INDEX ON Production.Document (
    Title LANGUAGE 1033,
    DocumentSummary LANGUAGE 1033,
    Document TYPE COLUMN FileExtension LANGUAGE 1033
) KEY INDEX PK_Document_DocumentID
WITH STOPLIST = SYSTEM,
    SEARCH PROPERTY LIST = DocumentPropertyList,
    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

Zie ook