FullText não encontra uma palavra específica
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.