Condividi tramite


FREETEXTTABLE (Transact-SQL)

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

La funzione 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 sulle forme di ricerca full-text supportate da SQL Server, vedere Esecuzione della query con ricerca Full-Text.

Icona di collegamento a un argomento Convenzioni della 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. table o viewpuò essere un nome di oggetto di database a una, due o tre parti. L'esecuzione della ricerca in una vista può interessare solo una tabella di base con indicizzazione full-text.

    table non può includere un nome di server e non può essere utilizzato per l'esecuzione di query su server collegati.

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

  • column_list
    Viene indicato che è possibile specificare più colonne, separate da virgola. column_list deve essere racchiuso tra parentesi. Se non si specifica language_term, la lingua di tutte le colonne in column_list deve essere la stessa.

  • *
    Specifica che la ricerca della stringa specificata in freetext_string deve essere eseguita in tutte le colonne registrate per la ricerca full-text. Se non si specifica language_term, la lingua di tutte le colonne con indicizzazione full-text della 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 di quanto avviene nella condizione di ricerca CONTAINS in cui AND è una parola chiave, se utilizzata in freetext_string la parola 'and' viene considerata una parola non significativa e verrà ignorata.

    Non è consentito utilizzare WEIGHT, FORMSOF, caratteri jolly, NEAR e altra sintassi. La stringa specificata in 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, la probabilità di ottenere una corrispondenza pertinente sarà maggiore.

    Se specificato come stringa, language_term corrisponde al valore della colonna alias nella vista di compatibilità sys.syslanguages (Transact-SQL). La stringa deve essere delimitata da virgolette singole, come in 'language_term'. Se l'argomento language_term viene specificato come valore intero, corrisponde all'LCID effettivo che identifica la lingua. Se specificato come valore esadecimale, language_term è 0x seguito dal valore esadecimale dell'LCID. Il valore esadecimale non deve superare le otto cifre, inclusi gli zero 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 vi sono risorse installate corrispondenti a tale lingua, SQL Server restituisce un errore. Per utilizzare le risorse della lingua neutra, specificare 0x0 per language_term.

  • top_n_by_rank
    Specifica che devono essere restituite solo le ncorrispondenze di pertinenza maggiore in ordine decrescente. Viene applicata solo quando viene specificato un valore n intero. Se 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 risultati più significativi.

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.

Come per CONTAINSTABLE, la tabella restituita include le colonne KEY e RANK, a cui viene fatto riferimento nella query per ottenere le righe appropriate e utilizzare i valori di pertinenza della riga.

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

A.Utilizzo di FREETEXT in INNER JOIN

Nell'esempio seguente vengono restituiti il nome e la descrizione di tutte le categorie correlate al termine sweet, candy, bread, dry o meat.

USE AdventureWorks2012
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

B.Specifica della lingua e delle corrispondenze di pertinenza maggiore

Nell'esempio seguente, identico al precedente, viene illustrato l'utilizzo dei parametri LANGUAGE language_term e top_n_by_rank .

USE AdventureWorks2012
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]

Non è necessario che per il parametro LANGUAGE language_term venga utilizzato il parametro top_n_by_rank.

Vedere anche

Attivitá

Creazione di query di ricerca full-text (Visual Database Tools)

Riferimento

CREATE FULLTEXT CATALOG (Transact-SQL)

CREATE FULLTEXT INDEX (Transact-SQL)

CONTAINS (Transact-SQL)

CONTAINSTABLE (Transact-SQL)

FREETEXT (Transact-SQL)

Funzioni per i set di righe (Transact-SQL)

SELECT (Transact-SQL)

WHERE (Transact-SQL)

Concetti

Introduzione alla ricerca full-text

Creazione e gestione dei cataloghi full-text

Creazione e gestione di indici full-text

Esecuzione della query con ricerca Full-Text

Opzione di configurazione del server precompute rank