FREETEXTTABLE (Transact-SQL)

Aplica-se a: simSQL Server (todas as versões compatíveis) SimBanco de Dados SQL do Azure

É uma função usada na cláusula from de uma Transact-SQL instrução SELECT para executar uma SQL Server pesquisa de texto completo 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 às palavras exatas 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.

(https://azure.microsoft.com/documentation/articles/sql-database-preview-whats-new/?WT.mc_id=TSQL_GetItTag)).|

Ícone de link do 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. a tabela ou exibição pode ser um nome de objeto de banco de dados de um, dois 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.

Diferentemente da condição de pesquisa CONTAINS, onde e é 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, 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 essa coluna, especificar o idioma 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 somente as n maiores correspondências classificadas, 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, rechamando 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 nomeadas Key e Rank, que são referenciadas dentro da 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 popula uma tabela simples de duas colunas, listando 3 contagens e as cores em seus sinalizadores. Ele cria e popula 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 qualquer produto com uma descrição que corresponda ao significado de high level of performance .

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  

C. Especificando o idioma e as correspondências de classificação mais alta

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

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

Consulte 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 (SQL Transact-)
SELECT (Transact-SQL)
WHERE (Transact-SQL)
Opção de configuração de servidor precompute rank