Condividi tramite


FREETEXTTABLE (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure

Funzione utilizzata nella clausola FROM di un'istruzione Transact-SQL SELECT per eseguire una ricerca full-text di SQL Server su colonne indicizzate full-text contenenti tipi di dati basati su caratteri. Questa funzione restituisce una tabella di zero, una o più righe per le colonne contenenti valori che corrispondono al significato e non solo alla formulazione esatta, del testo nel freetext_string specificato. Viene fatto riferimento a FREETEXTTABLE come se fosse un normale nome di tabella.

FREETEXTTABLE è utile per gli stessi tipi di corrispondenze di FREETEXT (Transact-SQL),

Le query che utilizzano FREETEXTTABLE restituiscono un valore di classificazione per pertinenza (RANK) e una chiave full-text (KEY) per ogni riga.

Nota

Per informazioni sui formati di ricerca full-text supportati da SQL Server, vedere Eseguire query con ricerca full-text.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Argomenti

table
Nome della tabella contrassegnata per query full-text. tabella o vistapuò essere un nome di oggetto di database in una, due o tre parti. L'esecuzione della ricerca in una vista può interessare solo una tabella di base con indicizzazione full-text.

la tabella non può specificare un nome del server e non può essere utilizzata nelle query sui server collegati.

column_name
Nome di una o più colonne indicizzate full-text della tabella specificata nella clausola FROM. La colonna o le colonne possono essere di tipo char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary r varbinary(max).

column_list
Viene indicato che è possibile specificare più colonne, separate da virgola. column_listdeve essere racchiuso tra parentesi. La lingua di tutte le colonne di column_list deve essere la stessa, a meno che non sia specificato language_term.

*
Specifica che la ricerca della stringa specificata in freetext_string deve essere eseguita in tutte le colonne registrate per la ricerca full-text. A meno che non venga specificato language_term , la lingua di tutte le colonne indicizzate full-text nella tabella deve essere la stessa.

freetext_string
Testo da cercare nella colonna specificata in column_name. È possibile specificare qualsiasi testo, comprese parole e frasi. Vengono generate corrispondenze se nell'indice full-text viene trovato un termine o vengono trovate le forme di un termine.

A differenza della condizione di ricerca CONTAINS in cui AND è una parola chiave, se usata in freetext_string la parola 'and' è considerata una parola non significativa o una parola non significativa e verrà rimossa.

Non è consentito utilizzare WEIGHT, FORMSOF, caratteri jolly, NEAR e altra sintassi. freetext_string viene sottoposta alla sillabazione, all'analisi morfologica e al thesaurus.

LANGUAGE language_term
Lingua le cui risorse verranno utilizzate per il word breaking, lo stemming, il thesaurus e la rimozione di parole non significative come parte della query. Questo parametro è facoltativo e può essere specificato come valore stringa, intero o esadecimale corrispondente all'identificatore delle impostazioni locali (LCID) di una lingua. Se si specifica language_term, la lingua rappresentata dall'argomento verrà applicata a tutti gli elementi della condizione di ricerca. Se non si specifica alcun valore, verrà utilizzata la lingua full-text della colonna.

Se documenti di lingue diverse vengono archiviati insieme come oggetti BLOB in una singola colonna, l'identificatore delle impostazioni locali (LCID) di un documento specifico determina la lingua da utilizzare per indicizzarne il contenuto. Se quando si esegue una query su una colonna di questo tipo si specifica LANGUAGE language_term è possibile aumentare la probabilità di una corrispondenza soddisfacente.

Quando l'argomento language_term viene specificato come stringa, corrisponde al valore della colonnaalias nella vista di compatibilità sys.syslanguages (Transact-SQL). La stringa deve essere racchiusa tra virgolette singole chiuse, come in 'language_term'. Se l'argomento language_term viene specificato come valore intero, corrisponde all'LCID effettivo che identifica la lingua. Se si specifica un valore esadecimale, language_term è 0x seguito dal valore esadecimale di LCID. Il valore esadecimale non deve superare le otto cifre, inclusi gli zeri iniziali.

Se il valore è in formato DBCS (Double-Byte Character Set), verrà convertito in Unicode da Microsoft SQL Server.

Se la lingua specificata non è valida o non sono presenti risorse installate corrispondenti a tale lingua, SQL Server restituisce un errore. Per usare le risorse della lingua neutra, specificare 0x0 per language_term.

top_n_by_rank
Specifica che vengono restituite solo le ncorrispondenze classificate più alte, in ordine decrescente. Si applica solo quando viene specificato un valore intero, n. Se il parametro top_n_by_rank viene combinato con altri parametri, la query potrebbe restituire un numero inferiore di righe rispetto al numero di righe effettivamente corrispondenti a tutti i predicati. top_n_by_rank consente di migliorare le prestazioni delle query richiamando solo i riscontri più rilevanti.

Osservazioni:

I predicati e le funzioni full-text possono essere utilizzati in una singola tabella, specificata in modo implicito nel predicato FROM. Per cercare in più tabelle, utilizzare una tabella unita in join nella clausola FROM, che consente di eseguire una ricerca in un set di risultati prodotto da due o più tabelle.

La funzione FREETEXTTABLE utilizza le stesse condizioni di ricerca del predicato FREETEXT.

Analogamente a CONTAINSTABLE, la tabella restituita ha colonne denominate KEY e RANK, a cui viene fatto riferimento all'interno della query per ottenere le righe appropriate e usare i valori di classificazione delle righe.

Autorizzazioni

La funzione FREETEXTTABLE può essere richiamata soltanto dagli utenti che dispongono delle autorizzazioni SELECT appropriate per la tabella specificata o per le colonne della tabella a cui viene fatto riferimento.

Esempi

R. Esempio semplice

Nell'esempio seguente viene creata e popolata una tabella semplice di due colonne, che elenca 3 contee e i colori nei relativi flag. Crea e popola un catalogo full-text e un indice nella tabella. Viene quindi illustrata la sintassi FREETEXTTABLE .

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. Utilizzo di FREETEXT in INNER JOIN

Nell'esempio seguente viene restituita la descrizione e la classificazione di tutti i prodotti con una descrizione corrispondente al significato di 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. Specifica della lingua e delle corrispondenze di pertinenza maggiore

L'esempio seguente è identico e mostra l'uso dei LANGUAGEparametri language_term e 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  

Nota

Il parametro LANGUAGE language_term non è necessario per usare il parametro top_n_by_rank .

Vedi anche

Introduzione alla ricerca full-text
Creare e gestire cataloghi full-text
CREATE FULLTEXT CATALOG (Transact-SQL)
CREATE FULLTEXT INDEX (Transact-SQL)
Creazione e gestione di indici full-text
Eseguire query con ricerca full-text
Creare query di ricerca full-text (Visual Database Tools)
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
Funzioni del set di righe (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)
Opzione di configurazione del server precompute rank
Confrontare le funzionalità in database SQL di Azure e Istanza gestita di SQL di Azure