Pensé en esto, y he estado tratando de encontrar soluciones sobre cómo realizar búsquedas difusas en una base de datos, si, por ejemplo, un usuario escribe un error ortográfico. ¿Algún problema evidente con la lógica detrás de esto? ¿Funcionará y se ha hecho antes?
Nuestra mesa que deseamos buscar:
**tblArticles**
Body - Soundex_Body - CharacterCoded_Body
Por lo tanto, almacenamos el cuerpo del texto sin formato para su visualización física. Las otras 2 columnas se usan para búsquedas que se calculan de la siguiente manera:
Soundex
El cuerpo se divide en sus palabras y se traduce a su versión soundex. IE, el cuerpo resultante podría ser algo como:
H252 B54 C23 E33... etc
Entonces alguien podría ingresar 'dinosore', y el cuerpo del artículo lee 'dinosaurio', ambos evalúan a B26. Luego ejecutamos un LIKE en el valor soundex del término de búsqueda.
Carácter codificado
Dado un mapeo de caracteres que asigna caracteres a números primos, IE:
h = 2
e = 3
l = 5
o = 7
p = 11
c = 13
help = 2*3*5*11 = 330
hello = 2*3*5*5*7 = 1050
hell = 2*3*5*5 = 150
hlep = 2*5*3*11 = 330
cello = 13*3*5*5*7 = 6825
Si un usuario quisiera escribir 'hola' pero cambiara dos o más caracteres, por ejemplo, 'hola', evaluaría el mismo número. Divida el cuerpo sin formato en palabras, codifique con certeza cada palabra y almacénelo en la base de datos para obtener un campo similar al siguiente:
330 6825 330 1050... etc
Entonces, podemos buscar en este valor para que coincida con los tipos erróneos.
Beneficios
- Errores tipográficos protegidos contra
- Ortografía fonética incorrecta protegida contra
- Más amigable que no habla inglés nativo
- Funcionará en cualquier idioma (donde funciona soundex)
Comentarios y pensamientos? Una especie de búsqueda multicapa. Por supuesto, puede ponderar los valores de retorno para hacerlo aún mejor (es decir, una coincidencia de cuerpo de texto literal vale más), pero ¿es esta una buena solución para los errores de ortografía y las personas que no hablan inglés nativo haciendo búsquedas?