Jan Sostaric: Intelligente Suchmaschine

Hallo Leute!

Wir planen gerade ein grösseres Projekt indem unter anderem eine grosse Kundendatenbank enthalten ist.

Da vorhandene Kunden (es gibt noch einen "Kunden-Status" der mitläuft) jederzeit andere Kunden eintragen können, und hier die Anzahl rasch auf mehrere 1000 Einträge wachsen kann, haben wir ein Problem mit evtl. Doppel-Einträgen.

Ok, ich kann bei der Eingabe einige Felder per '=' oder 'LIKE' abprüfen, aber vor allem bei Firmennamen würde das nicht richtig greifen. zB schon bei den verschiedenen Schreibweisen von 'GmbH', wie 'G.m.b.H', 'GesmbH', 'Ges.m.b.H',...

Was ich bzw. wir brauchen, ist ein "mitdenkendes" Suchsystem, dass eben wenn man zB "Muster GmbH" eingibt, auch nach "Muster GesmbH", "Muster Ges.m.b.H",... sucht.

Nun ein weiteres Problem, wir setzen PHP und MySQL ein. Ist sowas überhaupt damit möglich? Weiss jemand vielleicht einen Ansatz, wie man solche Schreibweisen auseinanderhalten kann, oder gar schon ein fertiges Script?

Bin für jeden Hinweis dankbar!

lg, Jan

  1. Mit den 1000 Einträgen dürftet ihr keine Probleme bekommen ( ist auf jeden fall nicht zu viel! ) wenn man mit like eine Datenbankabfrage macht ist die Groß / Kleinschreibung egal, sachen wie Punkte und Leerzeichen mußt du jedoch selber herausfildern!
    Des weiteren  solltest du in dem Fall auch gleich ß->ss, ä->ae ... umwandeln damit man dich damit auch nicht austrixen kann!
    Aber es kommt auch drauf an welche eingaben du überhaupt zur verfügung hast! bei Postleitzahlen und ähnliche4s läst es sich schon mal sehr gut und zuverlässig vorsortieren!

    --------------------------------
    Webmaster of http://www.villedemare.de

    1. Ach  ja hab noch was vergessen... ich würde auf jeden fall zwei Felder machen, eines mit dem Such / Sortierbegriff (ohne .,;:?!- "mehrfach leerzeichen" äüöß ...) und eines mit dem Richtigen Namen!

      P.S.: Wenn nes ne Normale Suchmaschiene wird hoffe ich das meine Seite auch aufgenommen wird... ;-)
      Wenn ich schon Tips zur Erstellung geben!

      Stefan

      --------------------------------
      Webmaster of http://www.villedemare.de

    2. Hallo Stefan!

      Mit den 1000 Einträgen dürftet ihr keine Probleme bekommen ( ist auf jeden fall nicht zu viel! ) wenn man mit like eine Datenbankabfrage macht ist die Groß / Kleinschreibung egal, sachen wie Punkte und Leerzeichen mußt du jedoch selber herausfildern!
      Des weiteren  solltest du in dem Fall auch gleich ß->ss, ä->ae ... umwandeln damit man dich damit auch nicht austrixen kann!
      Aber es kommt auch drauf an welche eingaben du überhaupt zur verfügung hast! bei Postleitzahlen und ähnliche4s läst es sich schon mal sehr gut und zuverlässig vorsortieren!

      Nun ja, von uns werden am Anfang 1700 Kunden eingetragen, die dann nach der Freischaltung selber neue Kunden eintragen können. Wir rechnen hier schon mit dem Faktor 50.000, mindestens. Die Bezeichung "einige 1000" war mein Fehler ;o)

      Das mit Punkten und Leerzeichen ist nicht das grosse Problem stimmt, auch ß nicht unbedingt, aber zB GmbH != GesmbH, egal ob Klein- oder Grossschreibung.

      Wobei mir da jetzt schon einige Ideen kommen ;o) wird halt so oder so eine Mordsprogrammiererei ;o( Nur das mit den ähnlich klingenden Begriffen pack ich noch nicht ganz. Das gibts ja zB bei Google oder Amazon (eine Suche nach "Desperados" findet auch "Desperado", das kann LIKE nicht).

      lg, Jan

      PS: Leider wird es eine interne Suchmaschine, in der nur die Kunden eben andere Kunden suchen können (Die Suchoption ist nur ein kleiner Part vom kompletten Projekt).

  2. Ok, ich kann bei der Eingabe einige Felder per '=' oder 'LIKE' abprüfen, aber vor allem bei Firmennamen würde das nicht richtig greifen. zB schon bei den verschiedenen Schreibweisen von 'GmbH', wie 'G.m.b.H', 'GesmbH', 'Ges.m.b.H',...

    Ich würde erstmal einige Sonderzeichen wie '.' oder '-' generell vor der Prüfung entfernen, die bereits vorhandenen Einträge aus der Datenbank holen und dann im PHP-Skript mit Funktionen wie levenshtein, metaphone, soundex, similar_text, etc. versuchen auf Ähnlichkeit zu prüfen, wobei ich dir mal levenshtein empfehlen würde. Um das Problem von Falscherkennungen zu vermeiden, das durch besonders strenge Prüfung auf Ähnlichkeit entstehen würde, würde ich einfach dem Benutzer in einer extra Maske darauf hinweisen, das der von ihm eingetragene Firmenname ähnlich zu einigen anderen bereits existierenden ist, diese dort auflisten und ihn fragen, ob er den Eintrag trotzdem erstellen möchte. So kommt der Kunde sich dann nicht grundlos bevormundet vor und man kann auch auf grobe Ähnlichkeiten prüfen ohne dann viele ähnliche aber unterschiedliche Firmennamen zu pauschal nicht zuzulassen.

    1. Hallo!

      Vielen Dank! Das war genau das, was ich suche ;o) Ich hab bereits einige Infos über die einzelnen Funktionen gefunden, werd damit ein bisschen herumprobieren ;o)

      lg,

      Jan