Rolf B: mySQL: Ähnlichkeits-Suche

Beitrag lesen

Hallo Linuchs,

sowas solltest du nicht zur Laufzeit tun, das bremst die DB massiv.

Du hast eine Menge von Feldern, in denen gesucht wird. In diesen Feldern stehen Worte. Du kannst nun jedes Feld in Worte zerlegen, jedes Wort in eine "leichter suchbare" Form bringen und damit einen Wortindex anlegen.

Dann speicherst Du pro Suchwort die Einträge, die darauf passen, im Prinzip also eine m:n Beziehung. Sowas muss nicht zwingend live passieren, dass kann auch morgens um 5 durch einem Batchjob passieren. An der m:n Relation kannst Du noch speichern, welcher Art dieser Treffer ist (welches Datenfeld, welcher Eintragstyp) und damit bei der Suche dann filtern.

Einfacher als ein Wortindex ist sicherlich ein Set von Schattenfeldern, in denen die Texte der normalen Felder in suchoptimierter Form stehen.

Ein Überführen in eine "leichter suchbare Form" ist sicherlich kein triviales Unterfangen. Erster Schritt ist, alles klein zu schreiben und Sonderzeichen zu entfernen. Man könnte auch y und ü in i umwandeln, á, à, â (usw) in a, é, è, ä in e und ö, tja, vielleicht in o. Ein x in chs oder ks. Das ist nur exemplarisch - man müsste schauen ob es für sowas Libraries gibt. Es muss sicherlich auch spezifisch für deutsche Sprache gemacht werden (hast Du dänische oder niederländische Einträge?)

Alles darüber hinaus gehende wird immer wieder mit den Mehrdeutigkeiten von Sprache kollidieren. Mitmachorchester. Ist das ein Chor (Mitma-Chor-Chester)? Gerade eine optimierte Suche nach Wortteilen, die Google relativ gut vorführt, setzt gute Wörterbücher oder KI voraus.

Rolf

--
sumpsi - posui - clusi