Delen via


VRIJTEKSTTABEL (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Is een functie die wordt gebruikt in de FROM-clausule van een Transact-SQL SELECT-instructie om een SQL Server-voltekstzoekopdracht uit te voeren op full-text geïndexeerde kolommen met tekengebaseerde datatypes. Deze functie geeft een tabel met nul, één of meer rijen terug voor die kolommen met waarden die overeenkomen met de betekenis en niet alleen de exacte bewoording van de tekst in de gespecificeerde freetext_string. FREETEXTTABLE wordt genoemd alsof het een gewone tabelnaam is.

FREETEXTTABLE is nuttig voor dezelfde soorten matches als de FREETEXT (Transact-SQL),

Zoekopdrachten met FREETEXTTABLE geven een relevantierangschikkingswaarde (RANK) en een full-text key (KEY) voor elke rij terug.

Opmerking

Zie Query met Full-Text Searchvoor informatie over de vormen van zoekopdrachten in volledige tekst die worden ondersteund door SQL Server.

Transact-SQL syntaxis-conventies

Syntaxis

FREETEXTTABLE (table , { column_name | (column_list) | * }   
          , 'freetext_string'   
     [ , LANGUAGE language_term ]   
     [ , top_n_by_rank ] )  

Arguments

table
Is de naam van de tabel die is gemarkeerd voor full-text query. Tabel of weergavekan een database-objectnaam zijn die één of drie delen bevat. Bij het queryen van een weergave kan slechts één full-text geïndexeerde basistabel worden gebruikt.

table kan geen servernaam specificeren en kan niet worden gebruikt in queries tegen gekoppelde servers.

column_name
Is de naam van een of meer geïndexeerde kolommen in volledige tekst van de tabel die zijn opgegeven in de FROM-component. De kolommen kunnen van het type teken, varchar, nchar, nvarchar, tekst, , ntext, afbeelding, xml-, varbinaireof varbinary(max).

column_list
Geeft aan dat meerdere kolommen, gescheiden door een komma, kunnen worden opgegeven. column_list moet tussen haakjes staan. Tenzij language_term is opgegeven, moet de taal van alle kolommen van column_list hetzelfde zijn.

*
Hiermee geeft u op dat alle kolommen die zijn geregistreerd voor zoeken in volledige tekst moeten worden gebruikt om te zoeken naar de opgegeven freetext_string. Tenzij language_term is gespecificeerd, moet de taal van alle full-text geïndexeerde kolommen in de tabel hetzelfde zijn.

freetext_string
Is tekst die moet worden gezocht in de column_name. Alle tekst, inclusief woorden, woordgroepen of zinnen, kan worden ingevoerd. Overeenkomsten worden gegenereerd als een term of de vormen van een term worden gevonden in de volledige-tekstindex.

In tegenstelling tot de zoekconditie CONTAINS waar AND een trefwoord is, wordt het woord 'and' bij gebruik in freetext_string beschouwd als een ruiswoord of stopwoord en wordt het weggegooid.

Het gebruik van GEWICHT, FORMSOF, jokertekens, NEAR en andere syntaxis is niet toegestaan. freetext_string is woordgebroken, gestamd en doorgegeven door de synoniemenlijst.

TAAL language_term
Is de taal waarvan de resources worden gebruikt voor woordbreking, stemming en synoniemenlijst en stopwoordverwijdering als onderdeel van de query. Deze parameter is optioneel en kan worden opgegeven als een tekenreeks, geheel getal of hexadecimale waarde die overeenkomt met de landinstellings-id (LCID) van een taal. Als language_term is opgegeven, wordt de taal die deze vertegenwoordigt toegepast op alle elementen van de zoekvoorwaarde. Als er geen waarde is opgegeven, wordt de volledige teksttaal van de kolom gebruikt.

Als documenten van verschillende talen samen worden opgeslagen als binaire grote objecten (BLOBs) in één kolom, bepaalt de landinstellings-id (LCID) van een bepaald document welke taal wordt gebruikt om de inhoud te indexeren. Bij het opvragen van zo'n kolom kan het specificeren van LANGUAGE language_term de kans op een goede match verhogen.

Wanneer het als string wordt gespecificeerd, komt language_term overeen met de alias-kolomwaarde in de sys.syslanguages (Transact-SQL) compatibiliteitsweergave. De tekenreeks moet tussen enkele aanhalingstekens staan, zoals in 'language_term'. Wanneer dit is opgegeven als een geheel getal, is language_term de werkelijke LCID die de taal identificeert. Wanneer deze waarde is opgegeven als een hexadecimale waarde, wordt language_term 0x gevolgd door de hexadecimale waarde van de LCID. De hexadecimale waarde mag niet groter zijn dan acht cijfers, inclusief voorloopnullen.

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

Als de gespecificeerde taal niet geldig is of er geen bronnen zijn geïnstalleerd die overeenkomen met die taal, geeft SQL Server een foutmelding terug. Als u de neutrale taalbronnen wilt gebruiken, geeft u 0x0 op als language_term.

top_n_by_rank
Geeft aan dat alleen de nhoogst gerangschikte wedstrijden, in aflopende volgorde, worden teruggegeven. Is alleen van toepassing wanneer een geheel getal, n, is opgegeven. Als top_n_by_rank wordt gecombineerd met andere parameters, kan de query minder rijen retourneren dan het aantal rijen dat daadwerkelijk overeenkomt met alle predicaten. top_n_by_rank kunt u de queryprestaties verbeteren door alleen de meest relevante treffers in te halen.

Opmerkingen

Predicaten en functies in volledige tekst werken in één tabel, die wordt geïmpliceerd in het predicaat FROM. Als u in meerdere tabellen wilt zoeken, gebruikt u een gekoppelde tabel in uw FROM-component om te zoeken naar een resultatenset die het product is van twee of meer tabellen.

FREETEXTTABLE gebruikt dezelfde zoekvoorwaarden als het FREETEXT-predicaat.

Net als CONTAINSTABLE heeft de teruggegeven tabel kolommen genaamd KEY en RANK, die binnen de query worden verwezen om de juiste rijen te verkrijgen en de rangschikkingswaarden van de rijen te gebruiken.

Permissions

FREETEXTTABLE kan alleen worden aangeroepen door gebruikers met de juiste SELECT-rechten voor de gespecificeerde tabel of de gerefereerde kolommen van de tabel.

Voorbeelden

Eén. Eenvoudig voorbeeld

Het volgende voorbeeld maakt en vult een eenvoudige tabel van twee kolommen, waarin 3 counties en de kleuren in hun vlaggen worden weergegeven. Vervolgens maakt en vult het een full-text catalogus en index in de tabel. Daarna wordt de FREETEXTTABLE-syntaxis gedemonstreerd.

CREATE TABLE Flags (Country nvarchar(30) NOT NULL, FlagColors varchar(200));  
CREATE UNIQUE CLUSTERED INDEX FlagKey ON Flags(Country);  
INSERT Flags VALUES ('France', 'Blue and White and Red');  
INSERT Flags VALUES ('Italy', 'Green and White and Red');  
INSERT Flags VALUES ('Tanzania', 'Green and Yellow and Black and Yellow and Blue');  
SELECT * FROM Flags;  
GO  
  
CREATE FULLTEXT CATALOG TestFTCat;  
CREATE FULLTEXT INDEX ON Flags(FlagColors) KEY INDEX FlagKey ON TestFTCat;  
GO   
  
SELECT * FROM Flags;  
SELECT * FROM FREETEXTTABLE (Flags, FlagColors, 'Blue');  
SELECT * FROM FREETEXTTABLE (Flags, FlagColors, 'Yellow');  

B. FREETEXT gebruiken in een INNER JOIN

Het volgende voorbeeld geeft de beschrijving en rangorde van elk product met een beschrijving die overeenkomt met de betekenis van high level of performance.

USE AdventureWorks2022;  
GO  
  
SELECT FT_TBL.Description  
    ,KEY_TBL.RANK  
FROM Production.ProductDescription AS FT_TBL   
    INNER JOIN FREETEXTTABLE(Production.ProductDescription,  
    Description,   
    'high level of performance') AS KEY_TBL  
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]  
ORDER BY RANK DESC;  
GO  

C. Specificeren van taal en hoogst gerangschikte matches

Het volgende voorbeeld is identiek en toont het gebruik van de LANGUAGEparameters language_term en top_n_by_rank .

USE AdventureWorks2022;  
GO  
  
SELECT FT_TBL.Description  
    ,KEY_TBL.RANK  
FROM Production.ProductDescription AS FT_TBL   
    INNER JOIN FREETEXTTABLE(Production.ProductDescription,  
    Description,   
    'high level of performance',  
    LANGUAGE N'English', 2) AS KEY_TBL  
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]  
ORDER BY RANK DESC;  
GO  

Opmerking

De LANGUAGE language_term-parameter is niet vereist om de top_n_by_rank-parameter te gebruiken.

Zie ook

Aan de slag met Full-Text Search-
Full-Text catalogi maken en beheren
FULLTEXT CATALOG (Transact-SQL) maken
FULLTEXT-INDEX MAKEN (Transact-SQL)
Full-Text indexen maken en beheren
de query uitvoeren met Full-Text
Full-Text Search Query's (Visual Database Tools) maken
BEVAT (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
VRIJTEKST (Transact-SQL)
Rowset-functies (Transact-SQL)
SELECT (Transact-SQL)
WAAR (Transact-SQL)
precompute rank Server Configuration Option
Compare features in Azure SQL Database en Azure SQL Managed Instance