FREETEXT (Transact-SQL)

Data aggiornamento: 14 aprile 2006

Predicato utilizzato per eseguire una ricerca su colonne che contengono tipi di dati carattere per valori corrispondenti al significato e non all'esatta formulazione del testo nelle condizioni di ricerca. Se si utilizza FREETEXT, il motore delle query full-text esegue internamente le azioni in freetext_string di seguito elencate, assegna un peso a ogni termine, quindi cerca le corrispondenze.

  • Separazione della stringa in singole parole in base ai delimitatori di parola (word breaking).
  • Generazione di forme flessive delle parole (stemming).
  • Identificazione di una lista di espansioni o sostituzioni dei termini in base alle corrispondenze nel thesaurus.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

FREETEXT ( { column_name | (column_list) | * } 
          , 'freetext_string' [ , LANGUAGE language_term ] )

Argomenti

  • column_name
    Nome della colonna registrata per la ricerca full-text. Le colonne valide per la ricerca full-text sono le colonne di tipo char, varchar, nchar, nvarchar, text, ntext, image, xml e varbinary(max).
  • column_list
    Indica che è possibile specificare più colonne, separate da virgola. column_list deve essere racchiuso tra parentesi. A meno che non venga specificato language_term, la lingua di tutte le colonne in column_list deve essere uguale.
  • *
    Specifica che la ricerca della stringa specificata in freetext_string deve essere eseguita in tutte le colonne registrate per la ricerca full-text. Se nella clausola FROM sono specificate più tabelle, è necessario qualificare il simbolo * con il nome della tabella. A meno che non venga specificato language_term, la lingua di tutte le colonne della tabella deve essere uguale.
  • 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.

    freetext_string è di tipo nvarchar. Si verifica una conversione implicita quando un diverso tipo di dati character viene utilizzato come input. Nell'esempio seguente la variabile @SearchWord, definita come varchar(30), causa una conversione implicita nel predicato FREETEXT.

    USE AdventureWorks;
    GO
    DECLARE @SearchWord varchar(30)
    SET @SearchWord ='performance'
    SELECT Description 
    FROM Production.ProductDescription 
    WHERE FREETEXT(Description, @SearchWord);
    

    Poiché non è possibile utilizzare lo sniffing dei parametri nella conversione, utilizzare nvarchar per migliorare le prestazioni. Nell'esempio dichiarare @SearchWord come nvarchar(30).

    USE AdventureWorks;
    GO
    DECLARE @SearchWord nvarchar(30)
    SET @SearchWord = N'performance'
    SELECT Description 
    FROM Production.ProductDescription 
    WHERE FREETEXT(Description, @SearchWord);
    

    È inoltre possibile utilizzare l'hint per la query OPTIMIZE FOR nei casi in cui venga generato un piano non ottimale.

    A differenza di quanto avviene nella condizione di ricerca CONTAINS dove AND è una parola chiave, se utilizzata in freetext_string la parola 'and' viene considerata una parola non significativa e viene 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. Se freetext_string è racchiusa tra virgolette doppie, viene cercata una frase corrispondente. Il testo non viene sottoposto alla sillabazione e al thesaurus.

  • LANGUAGE language_term
    Lingua di cui verranno utilizzate le risorse per l'esecuzione del wordbreaking, dello stemming e del thesaurus e per la rimozione delle parole non significative nell'ambito della query FREETEXT. Questo parametro è facoltativo ed è possibile specificare un valore stringa, un valore integer o un valore esadecimale corrispondente all'identificatore delle impostazioni internazionali (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 per la ricerca full-text della colonna.

    Se l'argomento language_term viene specificato come stringa, corrisponde al valore della colonna alias nella tabella di sistema syslanguages. La stringa deve essere racchiusa tra virgolette singole, come in 'language_term'. Se l'argomento language_term viene specificato come valore integer, corrisponde all'effettivo LCID 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 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 oppure non vi sono risorse installate corrispondenti a tale lingua, Microsoft SQL Server restituisce un errore. Per utilizzare le risorse della lingua neutra, specificare 0x0 per language_term.

Osservazioni

Le query full-text che utilizzano il predicato FREETEXT sono meno precise delle query che utilizzano il predicato CONTAINS. Il motore di ricerca full-text di SQL Server identifica le parole e le frasi importanti. Alle parole chiave riservate e ai caratteri jolly che hanno generalmente significato nel parametro <contains_search_condition> del predicato CONTAINS non viene associato alcun significato speciale.

FREETEXT non viene riconosciuta come parola chiave se il livello di compatibilità è inferiore a 70. Per ulteriori informazioni, vedere sp_dbcmptlevel (Transact-SQL).

Esempi

A. Utilizzo di FREETEXT per la ricerca di parole contenenti valori di carattere specificati

Nell'esempio seguente viene eseguita la ricerca di tutti i documenti contenenti le parole associate a "vital", "safety" e "components".

USE AdventureWorks;
GO
SELECT Title
FROM Production.Document
WHERE FREETEXT (Document, 'vital safety components' );
GO

B. Utilizzo di FREETEXT con variabili

Nell'esempio seguente viene utilizzata una variabile anziché un termine di ricerca specifico.

USE AdventureWorks;
GO
DECLARE @SearchWord nvarchar(30);
SET @SearchWord = N'high-performance';
SELECT Description 
FROM Production.ProductDescription 
WHERE FREETEXT(Description, @SearchWord);
GO

Vedere anche

Riferimento

CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
Tipi di dati (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
WHERE (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

14 aprile 2006

Nuovo contenuto:
  • Aggiunta di informazioni in cui si consiglia di evitare la conversione con i valori freetext_string.