Esfinge e "você quis dizer ...?" Será que vai dar certo?

Estou tentando encontrar a maneira mais rápida de fazer sugestões de pesquisa. No começo, pensei que uma função UDF Levenstein combinada com uma tabela mysql faria o trabalho. Mas, usando o levenshtein, o mysql teria que passar por todas as linhas da tabela (toneladas de palavras), o que tornaria a consulta realmente lenta.

Agora eu instalei recentemente e comecei a usar o Sphinx (http://sphinxsearch.com/) para pesquisa em texto completo, principalmente devido ao seu desempenho e forte integração do mysql com o SphinxSE.

Então eu me perguntei se eu poderia implementar um algoritmo "você quis dizer" usando a esfinge para aumentar o desempenho de alguma forma, e acho que encontrei um simples. Basicamente, pego todas as palavras-chave que quero corrigir, coloco um espaço entre cada letra e coloco no índice de esfinge. Se a palavra for 'palavra-chave', ela se tornará 'k e y w o r d'. Agora, quando o usuário digita uma palavra, divido-a em letras e busco no índice da esfinge um registro (eu só preciso de um) que corresponda a qualquer uma das letras fornecidas. A melhor parte é que a esfinge é muito boa no cálculo da relevância (peso) das linhas correspondentes, portanto a melhor correspondência sempre terá o maior peso (eu acho). Ele também considera as posições de palavras (letras no meu caso), portanto a melhor correspondência será nessa ordem.

Com a consulta sphinx, recebo a palavra mais semelhante na minha lista de palavras-chave. Então eu verifico com php usando a distância estendida de Levenshtain que responde por letras reorganizadashttp://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance . Se a distância da string for menor que 2 (e! = 0), sugira a palavra. Caso contrário, não sugira nada.

Existe algum problema com a minha ideia? Algo em que não pensei? Quaisquer falhas esperadas com a consulta de esfinge e peculiaridades com o cálculo de relevância da esfinge que não daria a melhor correspondência? Por favor, corrija-me se estiver enganando em algum lugar.

questionAnswers(3)

yourAnswerToTheQuestion