Partilhar via


FREETEXTTABLE (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

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

FREETEXTTABLE é útil para os mesmos tipos de correspondências que o 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ção

Para obter informações sobre os formatos de pesquisas de texto completo compatíveis com o SQL Server, consulte Consulta com a pesquisa de texto completo.

Convenções de sintaxe de 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. tabela ou exibiçãopode ser um nome de objeto de banco de dados de uma, duas ou três partes. Durante a consulta a uma exibição, apenas uma tabela base indexada por texto completo pode ser envolvida.

A tabela 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 precisa ser colocada entre parênteses. A menos que language_term seja especificado, o idioma de todas as colunas da column_list precisará ser o mesmo.

*
Especifica que todas as colunas que forem registradas para pesquisa de texto completo deverão ser usadas para pesquisar a freetext_string determinada. A menos que language_term seja especificado, o idioma de todas as colunas indexadas de texto completo na tabela deve ser o mesmo.

freetext_string
É o texto a ser pesquisado no 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.

Ao contrário do critério de pesquisa CONTÉM, em que AND é uma palavra-chave, quando usada em freetext_string a palavra 'e' é 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, não flexionada e passada 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 uma coluna desse tipo, especificar 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 no modo de exibição de compatibilidade sys.syslanguages (Transact-SQL). A cadeia de caracteres precisa ser colocada entre aspas, como em 'language_term'. Quando especificado como um inteiro, language_term é a LCID real que identifica o idioma. Quando especificado como um valor hexadecimal, language_term é 0x seguido pelo valor hexadecimal da LCID. O valor hexadecimal não deve exceder oito dígitos, inclusive 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 neutro, especifique 0x0 como language_term.

top_n_by_rank
Especifica que apenas as ncorrespondências com classificação mais alta, em ordem decrescente, são retornadas. Aplica-se somente quando um valor inteiro, n, é 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 da consulta recuperando apenas as ocorrências mais relevantes.

Comentários

As funções e os predicados de texto completo trabalham 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.

Assim como CONTAINSTABLE, a tabela retornada tem colunas chamadas 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. Exemplo simples

O exemplo a seguir cria e preenche uma tabela simples de duas colunas, listando 3 municípios e as cores em seus sinalizadores. Ele cria e preenche um catálogo de texto completo e um índice na tabela. Em seguida, a sintaxe FREETEXTTABLE é demonstrada.

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. Usando FREETEXT em uma INNER JOIN

O exemplo a seguir retorna a descrição e a classificação de todos os produtos com uma descrição que corresponde ao significado de 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. Especificando o idioma e as correspondências de classificação mais alta

O exemplo a seguir é idêntico e mostra o uso dos LANGUAGEparâmetros 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  

Observação

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

Confira também

Iniciar a pesquisa de texto completo
Criar e gerenciar catálogos de texto completo
CREATE FULLTEXT CATALOG (Transact-SQL)
CREATE FULLTEXT INDEX (Transact-SQL)
Criar e gerenciar índices de texto completo
Consulta com pesquisa de texto completo
Criar consultas de pesquisa de texto completo (Visual Database Tools)
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
Funções de conjunto de linhas (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)
Opção de configuração do servidor precompute rank
Comparar recursos no Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure