Não sei se aqui é o local certo para está pergunta.
Eu tenho um modelo de dados normal como outro qualquer e preciso realizar a busca por palavra chave, no estilo google. Porem essa busca tem que ser realizada em divesas tabelas e colunas do modelo. Minha dúvida é como estrutura essa base. Eu não sei se cabe aqui um modelo de datawarehouse ou simplesmente criar uma tabela e armazenar nela o conteudo de todas as colunas que preciso pesquisar pela palavra.
Você pode adicionar uma nova coluna por tabela, com o “soundex” ou a “fonologia” da palavra, e buscar por lá. Isto se a sua busca é feita em colunas com somente uma palavra, para textos não ficaria legal.
Outra opção seria uma nova tabela com a palavra e uma referência para linha de outra tabela (ficaria mais trabalhoso).
[quote=Giulliano]Você pode adicionar uma nova coluna por tabela, com o “soundex” ou a “fonologia” da palavra, e buscar por lá. Isto se a sua busca é feita em colunas com somente uma palavra, para textos não ficaria legal.
Outra opção seria uma nova tabela com a palavra e uma referência para linha de outra tabela (ficaria mais trabalhoso).
Tenho quase certeza de que geração fonética não é tão simples assim. Isso porque tem alguns fonemas que dependem de contexto, por exemplo:
Raphael - Rafael (precisa ser substituído)
PH (acidez) - não precisa ser substituído
Uma vez eu ví um artigo da SQL Magazine que tinha uma implementação, e era estupidamente mais complexo do que find/replace.
EDIT: Como dito num tópico do StackOverflow, o algoritmo de distância de Levenshtein talvez produza resultados melhores do que soundex. http://en.wikipedia.org/wiki/Levenshtein_distance
[]'s[/quote]
É verdade…esse trecho de código está muito simples para cobrir todas as possíveis varíaveis. Usar a distância de Levenshtein tb tem seus problemas, pq ele não considera a posição dos caracteres apenas a quantidade de substituições. O que poderia trazer resultados fora do contexto. Num futuro distante espero aperfeiçoar esta classes para gerar ao menos um fonema melhor.