Buscar
  • Ignez Mello

FullText não encontra uma palavra específica

Atualizado: 31 de Jul de 2019


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.

#FullText

15 visualizações