Compartilhar via


FREETEXTTABLE (Transact-SQL)

É uma função usada na cláusula FROM de uma instrução SELECT Transact-SQL para executar uma pesquisa de texto completo do SQL Server nas colunas indexadas de texto completo que contêm tipos de dados baseados em caracteres. Esta função retorna uma tabela de zero, uma ou mais linhas para as colunas que contêm valores correspondentes ao significado e não apenas a frase exata do texto na freetext_string especificada. FREETEXTTABLE é referenciada como se fosse um nome de tabela comum.

FREETEXTTABLE é útil para os mesmos tipos de correspondência que FREETEXT (Transact-SQL).

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

ObservaçãoObservação

Para obter informações sobre os formulários de pesquisas de texto completo que têm suporte no SQL Server, consulte Consulta com pesquisa de texto completo.

Ícone de vínculo de tópico Convenções da 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 viewpode ser um nome de objeto de banco de dados de uma, duas ou três partes. Durante a consulta a uma exibição, só uma tabela base indexada com 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 ser incluído 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.

    Não é permitido o uso de WEIGHT, FORMSOF, curingas, NEAR e outra sintaxe. freetext_string é uma palavra quebrada, ramificada e enviada pelo dicionário de sinônimos.

  • 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 palavras irrelevantes (stop words) 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 LANGUAGE language_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 Microsoft SQL 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 ncorrespondências mais bem classificadas, em ordem decrescente, sejam retornadas. Aplica-se apenas quando um valor inteiro, n, está especificado. Se top_n_by_rank for combinado com outros parâmetros, a consulta retornará menos linhas do que o número de linhas que corresponde de fato a todos os predicados. top_n_by_rank permite aumentar o desempenho de consultas com a recuperação apenas das ocorrências mais relevantes.

Comentários

Predicados e funções de texto completo funcionam em uma única tabela 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.

Permissões

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

Exemplos

A.Usando FREETEXT em uma INNER JOIN

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.

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.Especificando o idioma e as correspondências de classificação mais alta

O exemplo a seguir é idêntico e mostra o uso dos parâmetros 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
ObservaçãoObservação

O parâmetr o LANGUAGE language_term não é necessário para usar o parâmetro top_n_by_rank .

Consulte também

Tarefas

Criar consultas de pesquisa de texto completo (Visual Database Tools)

Referência

CREATE FULLTEXT CATALOG (Transact-SQL)

CREATE FULLTEXT INDEX (Transact-SQL)

CONTAINS (Transact-SQL)

CONTAINSTABLE (Transact-SQL)

FREETEXT (Transact-SQL)

Funções de conjunto de linhas (Transact-SQL)

SELECT (Transact-SQL)

WHERE (Transact-SQL)

Conceitos

Iniciar a pesquisa de texto completo

Criar e gerenciar catálogos de texto completo

Criar e gerenciar índices de texto completo

Consulta com pesquisa de texto completo

Opção de configuração de servidor precompute rank