Ci ho pensato e ho cercato di trovare delle soluzioni su come cercare in un database una fuzzy, se per esempio un utente digita un errore di ortografia. Qualche problema lampante con la logica dietro questo? Funzionerà e è stato fatto prima?
La nostra tabella che vogliamo cercare:
**tblArticles**
Body - Soundex_Body - CharacterCoded_Body
Quindi memorizziamo il corpo del testo non elaborato per la visualizzazione fisica. Le altre 2 colonne sono usate per le ricerche che sono precalcolate nel seguente modo:
Soundex
Il corpo è diviso nelle sue parole e tradotto nella sua versione soundex. IE, il corpo risultante potrebbe essere qualcosa del tipo:
H252 B54 C23 E33... etc
Quindi qualcuno potrebbe entrare in "dinosore" e il corpo dell'articolo legge "dinosauro" entrambi valutano in B26. Quindi eseguiamo un LIKE sul valore soundex del termine di ricerca.
Carattere codificato
Dato un mapping di caratteri che mappa i caratteri in numeri primi, 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
Se un utente intendeva digitare "ciao" ma ha cambiato due o più caratteri, ad esempio "hlelo", valuterebbe lo stesso numero. Dividi il corpo grezzo in parole, primo codifica ogni parola e archivia nel database dandoti un campo simile a:
330 6825 330 1050... etc
A quel punto, ci piacerebbe cercare su questo valore per corrispondere ai mistypes.
Vantaggi
- Errori protetti contro
- Le ortografie errate fonetiche sono protette contro
- Altro non di madrelingua inglese
- Funzionerà in qualsiasi lingua (dove soundex funziona)
Commenti e pensieri? Una sorta di ricerca su più livelli. Ovviamente puoi aumentare i valori di peso per renderlo ancora migliore (ad esempio, una corrispondenza letterale del corpo del testo vale di più), ma è una buona soluzione per gli errori di ortografia e per i madrelingua inglesi che eseguono ricerche?