"Levenshtein" Suche auf Volltextindex durchführen
am 12.09.2004 16:08:26 von Ralph BergmannHallo!
Ich hab eine SQL-DB, welche viel Dokumentation (Text) enthält. Nun
möchte ich diesen Text durchsuchen. Die Suche soll ähnlich die einer
Internetsuchmaschine laufen, sprich nach einzelnen Wörtern und die dann
je nach Anwenderwunsch AND oder OR verknüpft.
Nun dachte ich mir, ich lasse über den gestammten Text einen
Volltextindex erstellen, damit das Suchen schneller geht. Sprich eine
Tabelle mit allen indizierten Wörtern und einer ID zu jedem Wort und
einer zweiten Tabelle, in der zu jeder ID eines Wortes die Fundstellen
stehen. So weit kein Problem.
Nun möchte ich jedoch noch die Suche mit einer unscharfen Suche
erweitern. Am einfachsten wäre es wohl, wenn ich es mit Soundex mache.
Einfach in der Tabelle mit den Wörtern zu jedem Wort noch den Soundex
Code abspeichern und dann eben nach diesem suchen. Doch Soundex gefällt
mir nicht so. Warum?
Laut Soundex sind
BERGMANN = BURZYNSKI = B625 ---> gleich
oder
KLAUS = K420 und CLAUS = C420 ---> nicht gleich
nach Levenshtein:
BERGMANN + BURZYNSKI = 13.2 ---> nicht wirklich gleich
KLAUS + CLAUS = 1.73 ---> fast gleich
Ist wohl durch die Berechnung von Soundex begründet, da es ja nur die
ersten 4 Buchstaben nimmt (ja ich weiß, stimmt nicht ganz) außerdem ist
Soundex ja auch nur für Nachnamen gedacht und ich hätte mehr als nur
Nachnamen zu durchsuchen.
Jedenfalls wäre mir eine Suche nach Levenshtein lieber, doch dann müsste
ich den kompletten Index nach dem zu suchenden Wort durchlaufen lassen,
viel Arbeit für die Datenbank :(
Ich könnte es noch vereinfachen, indem ich nur die Wörter des Indexes
nehme, die 2 Buchstaben länger oder kürzer als der Suchstring sind, ist
dann aber immer noch viel Arbeit :(
Hätte da noch jemand eine andere Idee, wie man so was ressourcenschonend
machen könnte?
Besten Dank!
Ralph