Ich habe darüber nachgedacht und versucht, Lösungen für die Fuzzy-Suche in einer Datenbank zu finden, wenn beispielsweise ein Benutzer einen Rechtschreibfehler eingibt. Hast du irgendwelche offensichtlichen Probleme mit der Logik dahinter? Wird es funktionieren und wurde es schon einmal gemacht?
Unseren Tisch möchten wir durchsuchen:
**tblArticles**
Body - Soundex_Body - CharacterCoded_Body
Daher speichern wir den Rohtextkörper für die physische Anzeige. Die anderen beiden Spalten werden für Suchvorgänge verwendet, die folgendermaßen vorberechnet werden:
Soundex
Der Körper wird in seine Worte zerlegt und in die Soundex-Version übersetzt. IE, resultierender Körper könnte ungefähr so aussehen:
H252 B54 C23 E33... etc
Jemand könnte also 'dinosore' eingeben und der Artikeltext lautet 'dinosaur'. Beide werden mit B26 bewertet. Wir führen dann ein LIKE für den Soundex-Wert des Suchbegriffs aus.
Zeichencodiert
Angesichts einer Zeichenzuordnung, die Zeichen auf Primzahlen abbildet, führt IE Folgendes aus:
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
Wenn ein Benutzer 'hallo' eingeben wollte, aber zwei oder mehr Zeichen vertauschte, zum Beispiel 'hlelo', würde er dieselbe Zahl auswerten. Teilen Sie den Rohkörper in Wörter auf, kodieren Sie jedes Wort mit einem Primecode und speichern Sie ihn in der Datenbank. So erhalten Sie ein Feld, das wie folgt aussieht:
330 6825 330 1050... etc
Wir können diesen Wert dann gerne nach Fehlern durchsuchen.
Leistungen
- Tippfehler geschützt gegen
- Phonetisch falsche Schreibweisen geschützt gegen
- Mehr nicht Muttersprachler Englisch sprechend freundlich
- Funktioniert in jeder Sprache (wo Soundex funktioniert)
Kommentare und Gedanken? Eine Art vielschichtige Suche. Sie können natürlich die Rückgabewerte gewichten, um sie noch besser zu machen (dh eine wörtliche Textkörperübereinstimmung ist mehr wert).