FREETEXTTABLE (Transact-SQL)

Retorna uma tabela de zero, uma ou mais linhas dessas colunas contendo tipos de dados baseados em caracteres para valores que correspondem ao significado, mas não às palavras exatas do texto na freetext_string especificada. FREETEXTTABLE pode ser referenciada apenas na cláusula FROM de uma instrução SELECT como um nome de tabela regular.

Consultas que usam FREETEXTTABLE especificam consultas de texto completo do tipo texto livre que retornam um valor de classificação de relevância (RANK) e uma chave de texto completo (KEY) para cada linha.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

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

Argumentos

  • table
    É o nome da tabela que foi marcada para consulta de texto completo. table ou view pode ser um nome de objeto de banco de dados de uma, duas ou três partes. Ao consultar uma exibição, somente uma tabela base indexada de texto completo pode ser envolvida.

    A table não pode especificar um nome de servidor e não pode ser usada em consultas em servidores vinculados.

  • column_name
    É o nome de uma ou mais colunas indexadas de texto completo da tabela especificada na cláusula FROM. As colunas podem ser do tipo char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary ou varbinary(max).

  • column_list
    Indica que várias colunas, separadas por uma vírgula, podem ser especificadas. column_list deve estar entre parênteses. A menos que language_term seja especificado, o idioma de todas as colunas de column_list deve ser o mesmo.

  • *
    Especifica que todas as colunas que foram registradas para pesquisas de texto completo devem ser usadas para pesquisar um determinado freetext_string. A menos que language_term seja especificado, o idioma de colunas indexadas de texto completo na tabela deve ser o mesmo.

  • freetext_string
    É texto a ser pesquisado na column_name. Qualquer texto, incluindo palavras, frases ou orações, pode ser inserido. Serão geradas correspondências se forem achados termos ou formas de termos no índice de texto completo.

    Diferentemente da condição de pesquisa CONTAINS, em que AND é uma palavra-chave, quando usada em freetext_string a palavra 'and' é considerada uma palavra de ruído ou palavra irrelevante e será descartada.

    O uso de WEIGHT, FORMSOF, curingas, NEAR e outra sintaxe não é permitido. freetext_string é uma palavra quebrada, ramificada, e submetida ao dicionário de sinônimos. Se freetext_string estiver entre aspas duplas, uma correspondência de frase será executada no lugar. A lematização e o dicionário de sinônimos não serão executados.

  • LANGUAGE language_term
    É o idioma cujos recursos serão usados para quebra de palavras, lematização e dicionário de sinônimos e remoção de palavra irrelevante como parte da consulta. Esse parâmetro é opcional e pode ser especificado como uma cadeia de caracteres, um inteiro ou um valor hexadecimal que corresponda ao LCID (identificador de localidade) de um idioma. Se language_term for especificado, o idioma que ele representa será aplicado a todos os elementos do critério de pesquisa. Se nenhum valor for especificado, o idioma de texto completo da coluna será usado.

    Se documentos de idiomas diferentes forem armazenados em conjunto como BLOBs (objetos binários grandes) em uma única coluna, o LCID de um determinado documento determinará qual idioma será usado para indexar seu conteúdo. Ao consultar esse tipo de coluna, a especificação de LANGUAGElanguage_term pode aumentar a probabilidade de uma boa correspondência.

    Quando especificado como uma cadeia de caracteres, language_term corresponde ao valor da coluna alias na exibição de compatibilidade de sys.syslanguages (Transact-SQL). A cadeia de caracteres deve estar entre aspas simples, como em 'language_term'. Quando especificado como um inteiro, language_term é o LCID real que identifica o idioma. Quando especificado como um valor hexadecimal, language_term é 0x seguido pelo valor hexadecimal do LCID. O valor hexadecimal não deve exceder oito dígitos, incluindo zeros à esquerda.

    Se o valor estiver no formato DBCS (conjunto de caracteres de dois bytes), o MicrosoftSQL Server o converterá em Unicode.

    Se o idioma especificado não for válido ou se não houver nenhum recurso instalado que corresponda ao idioma, o SQL Server retornará um erro. Para usar os recursos de idioma neutros, especifique 0x0 como language_term.

  • top_n_by_rank
    Especifica que somente as n correspondências com a classificação mais alta, em ordem decrescente, são retornadas. Aplica-se apenas quando um valor inteiro, n, for especificado. Se top_n_by_rank estiver combinado com outros parâmetros, a consulta poderá retornar menos linhas que o número de linhas que realmente correspondem a todos os predicados. top_n_by_rank permite aumentar o desempenho da consulta chamando novamente apenas os acertos mais relevantes.

Comentários

Predicados e funções de texto completo funcionam em uma única tabela que está implícita no predicado FROM. Para pesquisar em várias tabelas, use uma tabela unida na cláusula FROM para pesquisar em um conjunto de resultados que é o produto de duas ou mais tabelas.

FREETEXTTABLE usa as mesmas condições de pesquisa que o predicado FREETEXT.

Como CONTAINSTABLE, a tabela retornada tem colunas nomeadas KEY e RANK, que são referenciadas na consulta para obter as linhas apropriadas e usar os valores de classificação de linha.

FREETEXTTABLE não será reconhecida como uma palavra-chave se o nível de compatibilidade for menor que 70. Para obter mais informações, consulte sp_dbcmptlevel (Transact-SQL).

Permissões

FREETEXTTABLE pode ser invocada por usuários com privilégios SELECT para a tabela especificada ou colunas referenciadas da tabela.

Exemplos

O exemplo a seguir retorna o nome e a descrição de categoria de todas as categorias relacionadas a sweet, candy, bread, dry ou meat.

ObservaçãoObservação

Para executar este exemplo, é necessário instalar o banco de dados Northwind. Para obter informações sobre como instalar o banco de dados Northwind, consulte Baixando os bancos de dados de exemplo Northwind e pubs.

USE Northwind;
SELECT FT_TBL.CategoryName 
    ,FT_TBL.Description
    ,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL 
    INNER JOIN FREETEXTTABLE(dbo.Categories, Description, 
        'sweetest candy bread and dry meat') AS KEY_TBL
        ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO

O exemplo a seguir é idêntico e mostra o uso dos parâmetros LANGUAGElanguage_term e top_n_by_rank .

USE Northwind;
SELECT FT_TBL.CategoryName 
    ,FT_TBL.Description
    ,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL 
    INNER JOIN FREETEXTTABLE(dbo.Categories, Description, 
        'sweetest candy bread and dry meat',LANGUAGE 'English',2) 
        AS KEY_TBL
        ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO
ObservaçãoObservação

O language_term parâmetro LANGUAGE não é exigido para usar o top_n_by_rank parâmetro.