top of page

FullText não encontra uma palavra específica

  • Ignez
  • 23 de jul. de 2019
  • 2 min de leitura

Eu montei um índice FullText para uma tabela de um cliente, com estas colunas:

  • Chassi - varchar(30)

  • chassi do veículo

  • Motor - varchar(20)

  • código do motor com até 17 caracteres

  • Combustivel - varchar(20)

  • Alcool

  • Gasolina

  • Alcool / Gasolina

  • Diesel

  • DescricaoServico - varchar(max)

  • tudo o que seria feito no veículo

  • StatusServico - varchar(20)

  • Aprovado

  • Cancelado

  • Reprovado

  • Aprovado com restrições

  • Conforme (usado quando o serviço é preparação do veículo para vistorias)

O objetivo da consulta era identificar um atendimento, considerando uma ou mais das cinco colunas acima. A consulta original usava LIKE '%' + @variavel + '%' para todas as colunas, porque a pesquisa poderia ser, por exemplo, por uma parte do código do motor, para localizar todos os serviços daquele tipo específico de motor.

Depois de várias opções, sugeri o uso de FullText:

Ajustamos as consultas e começamos os testes. Tudo estava indo muito bem, as consultas que levavam pelo menos 25 segundos, começaram a retornar em 0 segundo. Só que aí surgiu um problema, as consultas do StatusServico = 'CONFORME' não retornava os registros.

Se a cláusula fosse WHERE StatusServico = 'CONFORME', os registros eram encontrados.

Se a cláusula fosse WHERE CONTAINS(StatusServico, 'CONFORME'), nenhum registro era encontrado!

Depois de quebrar a cabeça, me lembrei que o FullText ignora algumas palavras, com artigos, conjunções e preposições. Segundo o dicionário, CONFORME pode ser um adjetivo, conjunção ou preposição, dependendo do uso na frase. Como eu criei o índice com o idioma "Brazilian", a palavra CONFORME foi desconsiderada.

Para resolver esta situação rapidamente, eu optei por alterar o idioma da coluna StatusServico no FullText para inglês. Assim, a palavra CONFORME deixou de ser considerada uma preposição, e o FullText encontrou os registros que eu queria.

Esta solução atendeu especificamente essa tabela desse cliente. É importante analisar cuidadosamente o uso do FullText em seu ambiente, para garantir que a troca do idioma não vai atrapalhar outras consultas. E como o idioma é definido por coluna, a pesquisa pela descrição do serviço não foi afetada.

 

Posts recentes

Ver tudo
Consulta de dados aleatórios

Uma dica facinha, para ajudar naquelas consultas por amostragem. Use ORDER BY NewId() para retornar resultados diferentes a cada SELECT.

 
 
 
Backup criptografado

Desde os primórdios dos bancos de dados ouvimos que "a informação é o bem mais precioso que as empresas possuem". Obviamente, se essa...

 
 
 

Comments


Posts Em Destaque
Posts Recentes
Arquivo
Procurar por tags
bottom of page