Full-Text Search – Overview

Bom dia pessoas!

Algumas conversas com o Rodrigo (at. http://rodrigodotnet.wordpress.com) sobre Full-Text Search (FTS) me animaram a escrever algumas coisas sobre esta feature, que tive a oportunidade de fazer uso de formas diversas em clientes e projetos.

Mas para que serve esta feature? Nestes primeiros artigos, veremos que ela é útil para indexar textos que normalmente utilizamos aquela já conhecida expressão “Campo LIKE ‘%valor%'” permitindo maior desempenho, além de outras facilidades, como pesquisar palavras independente de variação de gênero (masculino, feminino) ou número (singular, plural).

Para inicio de conversa, precisamos de uma tabela com campos textos (varchar, nvarchar, char e nchar – xml e varbinary também podem entrar na brincadeira, mas veremos em outra oportunidade) para indexar, lembrando que também será necessária uma chave única ou primária formada por um único campo nesta tabela.

Em seguida, criamos nosso catálogo:

Definimos que o catálogo será o padrão (“default”) e não terá sensibilidade a acentos (“accent insensitive”):

Depois de criado o catálogo, abra as propriedades e no menu Tables/Views, adicione as tabelas que serão indexadas, a chave única ou primária, as colunas e os idiomas utilizados na indexação. Por fim, defina “Track changes” com automático.

Criado o catálogo, adicione os registros na sua tabela:

INSERT INTO Textos VALUES
('Azul', 'Modelo de texto'),
('Verde', 'Segundo texto modelo'),
('Vermelho', 'Terceiro texto modelo'),
('Amarelo', 'Modelo'),
('Preto', 'Dados complementares de livros não lidos'),
('Branco', 'Leitura não obrigatória'),
('Azulado', 'Textos obrigatórios'),
('Azuis', 'Textos obrigatórios'),
('Verdes', 'Segunda versão dos textos'),
('Vermelha', 'Literatura'),
('Negro', 'Dados complementares de livros lidos'),
('Claro', 'Leitura obrigatória')

Depois execute suas primeiras consultas que substituirão o “Campo LIKE ‘%valor%'”:

SELECT * FROM Textos WHERE CONTAINS(Nome, 'texto')

SELECT * FROM Textos WHERE CONTAINS(Texto, 'texto')

Como o FTS é preenchido em um processo assíncrono, talvez demore um pouco para as palavras serem indexadas, e alguns fragmentos dos textos podem ser desconsiderados, como artigos, advérbios e pronomes.

O FTS possui duas funções básicas para as pesquisas, CONSTAINS e a FREETEXT, que têm sintaxes semelhantes, mas podem realizar tarefas bem diferentes, as quais eu explicarei no próximo artigo.

6 pensamentos sobre “Full-Text Search – Overview

    • Bom dia,

      Você pode utilizar a função FREETEXT passando tudo o que será pesquisado (ex.: FREETEXT(*, ‘carro verde’)) ou customizar a função CONTAINS com AND e OR (ex.: CONTAINS(*, ‘”verde”AND “carro”‘))

      Obs.: Recomendo CONSTAINS, por ser mais rápida.

  1. Pingback: Full-Text Search – CONTAINS – Parte 1 « SQL From Hell.com

  2. Pingback: Full-Text Search – CONTAINS – Parte 2 « SQL From Hell.com

  3. Pingback: Full-Text Search – Resumo « SQL From Hell.com

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s