Este team de redactores ha estado largas horas buscando la solución a tus interrogantes, te brindamos la solución por eso nuestro deseo es servirte de gran ayuda.
Solución:
Creo que deberías usar SOUNDS LIKE
o SOUNDEX()
Como su conjunto de datos es tan pequeño, una solución puede ser crear una nueva tabla para almacenar las palabras individuales o los valores de soundex contenidos en cada campo de texto y usar SONIDOS COMO en esa tabla.
p.ej:
SELECT * FROM table where id IN
(
SELECT refid FROM tableofwords
WHERE column SOUNDS LIKE 'right' OR column SOUNDS LIKE 'shlder'
)
ver: http://dev.mysql.com/doc/refman/5.0/en/string-funciones.html
Creo que no es posible buscar con comodín el string 🙁
MySQL no admite la búsqueda SOUNDEX en texto completo.
Si desea implementar un marco similar a Lucene, significa que debe tomar todos los documentos, dividirlos en palabras y luego crear un índice para cada palabra.
Cuando alguien busca “right shlder”, debe realizar una búsqueda SOUNDEX para cada palabra en la tabla de mundos:
$search = 'right shlder';
preg_match_all('(w+)', $search, $matches);
if (!empty($matches[0]))
$sounds = array_map('soundex', $matches[0]);
$query = 'SELECT word FROM words_list
WHERE SOUNDEX(word) IN(''.join('','',$sounds).'')';
y luego hacer una búsqueda de texto completo:
$query2 = 'SELECT * FROM table
WHERE MATCH(fultextcolumn)
AGAINST ('.join (' OR ', $resuls).' IN BINARY MODE)';
Donde $resultado es un array con los resultados de la primera consulta.
El término técnico para lo que está buscando es distancia de Levenshtein, que se utiliza para calcular la diferencia entre dos secuencias (en este caso, una secuencia de caracteres que es un string).
PHP en realidad tiene dos funciones integradas para eso, la primera es similar_text y la otra llamada levenshtein que debería ayudarlo con su problema. Tendrá que comparar si es lo suficientemente rápido para sus necesidades.
Nos encantaría que puedieras dar difusión a este escrito si te valió la pena.