MySQL Suchfunktion

Hallo zusammen.

ich habe folgendes Problem.
Ich möchte eine Suchfunktion für eine Datenbanktabelle schreiben, ich bekomm bei übereinstimmung like = ‚‘ die Ergebnisse aus der Datenbank.
Wenn ich nun aber als Suchwort „schreiben“ eintippe bekomme ich natürlich nicht die Ergebnisse von „schreib“.

Wie kann ich dies berücksichtigen, direkt in MySQL oder vielleicht über similar_text()??

Mit dem similar_text habe ich es versucht, aber da kommen nicht meine bevorzugten Ergebnisse.

Grüße,
Sebastian

Ich möchte eine Suchfunktion für eine Datenbanktabelle
schreiben, ich bekomm bei übereinstimmung like = ‚‘ die
Ergebnisse aus der Datenbank.
Wenn ich nun aber als Suchwort „schreiben“ eintippe bekomme
ich natürlich nicht die Ergebnisse von „schreib“.

http://dev.mysql.com/doc/refman/5.1/de/string-compar…
lies die sache mit den platzhaltern

Wie kann ich dies berücksichtigen, direkt in MySQL oder
vielleicht über similar_text()??

eine datenbank ist dazu da, dass man ihr die richteigen fragen stellt, nicht dass man sie fragt was sie alles weiss, um daraus dann etwas auszuwaehlen.

Hallo Sebastian,

nur damit wir die Aufgabe richtig verstehen: Willst Du von jeden Wort auch nach den Wörtern suchen, die entsprechend 2(,3,4,…) Buchstaben kürzer sind oder willst ein Art Thesaurus haben: schreiben und schreib und tippen und tippe haben die gleiche Beduetung, also wenn ich eins davon eintippe suche bitte auch nach allen vier Begriffen?

MfG Georg V.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ich möchte eine Suchfunktion für eine Datenbanktabelle

Mit dem similar_text habe ich es versucht, aber da kommen
nicht meine bevorzugten Ergebnisse.

Grüße,
Sebastian

Aber Sebastian das doch nun wirklich etwas wenig.
Gebe doch ein Beispeil , was dir z.b. am similar_text nicht gefällt, und was dir eigentlich gefallen würde. also ein Beispiel … oder gleich mehrere.

Hi Georg!

nur damit wir die Aufgabe richtig verstehen: Willst Du von
jeden Wort auch nach den Wörtern suchen, die entsprechend
2(,3,4,…) Buchstaben kürzer sind oder willst ein Art
Thesaurus haben: schreiben und schreib und tippen und tippe
haben die gleiche Beduetung, also wenn ich eins davon eintippe
suche bitte auch nach allen vier Begriffen?

suche bitte auch nach allen vier Begriffen?

Genau sowas in der Art. Wenn der Benutzer was eintippt, abr keine Ergebnisse bekommt, soll eine Liste angezeigt werden, die ähnlich sind, zB orthografisch (> Thesaurus ??) oder das über similar_text().

Wie zum Beispiel bei Google. Wenn ich bei Google Genetator eintippe, kommt Meinten Sie Generator?

Gruss,
Sebastian

Aber Sebastian das doch nun wirklich etwas wenig.
Gebe doch ein Beispeil , was dir z.b. am similar_text nicht
gefällt, und was dir eigentlich gefallen würde. also ein
Beispiel … oder gleich mehrere.

Ich habe es so gemacht:

  1. alle wörter die in der Datenbank stehen, werden in ein Array geschrieben.

  2. über similar_text gebe ich ihnen einen Prozentwert, über diesen Prozentwert entscheide ich dann welche Wörter angezeigt werden.

  3. Jedoch kommen hier nicht die Ergebnisse die ich mir erhofft habe!

    Beispiel 1)
    Ich tippe zum Beispiel schreiben ein:
    > Meine gewünschten Ergebnisse wären:

    • Schreibwerkstatt
    • schreib
    • Rechtschreibung

    Beispiel 2)
    Ich tippe zum Beispiel Malen ein:
    > Meine gewünschten Ergebnisse wären:

    • Acrylmalerei
    • Maler
    • Ausdrucksmalen

Grüsse,
Sebastian

http://dev.mysql.com/doc/refman/5.1/de/string-compar…
lies die sache mit den platzhaltern

OK, das klingt super. Habe es nun mit den Platzhaltern versucht, ich bekomme nun mehr Ergebnisse.

Jedoch nun zu meiner anderen Frage, wie entscheide ich, zB schreiben soll auf schreib gekürtzt werden und suche dann nach %schreib%?

Hallo Sebastian,

bitte warum erzählst Du nicht direkt, was Du gemacht hast, dann wäre auch die Aufgabenstellung klarer:

Ich habe es so gemacht:

  1. alle wörter die in der Datenbank stehen, werden in ein
    Array geschrieben.
  2. über similar_text gebe ich ihnen einen Prozentwert, über
    diesen Prozentwert entscheide ich dann welche Wörter angezeigt
    werden.
  3. Jedoch kommen hier nicht die Ergebnisse die ich mir erhofft
    habe!
> Beispiel 1)  
> Ich tippe zum Beispiel schreiben ein:  
> \> Meine gewünschten Ergebnisse wären:  
> - Schreibwerkstatt  
> - schreib  
> - Rechtschreibung  
>   
> Beispiel 2)  
> Ich tippe zum Beispiel Malen ein:  
> \> Meine gewünschten Ergebnisse wären:  
> - Acrylmalerei  
> - Maler  
> - Ausdrucksmalen

Warum erstellt diese Tabelle im Memory und nicht in der Datenbank? Dann könntest Du diesen Prozentwert direkt nach den neusten Ergebnissen modifizieren.

Wichtig wäre auch, dass man Eingabewörter, die keine oder nur wenige Treffer hat speichert, um das System ggf. umprogrammieren zu können. Also wirst Du später nicht nur Wörter haben, die in Deiner Datenbank existieren sondern auch Fehlschreibweisen.

Fehlschreibweisen (Hinweis bei Genetator auf das möglicherweise richtieg Wort Generator) kann man übrigens besser mit Levinstein-Distanz berechnen, aber dies ist auch eine teure Funktion.

MfG Georg V.

Hallo Sebastian,

Jedoch nun zu meiner anderen Frage, wie entscheide ich, zB
schreiben soll auf schreib gekürtzt werden und suche dann nach
%schreib%?

Das ist sehr schwierig und hängt auch davon ab, was für Gebiete Du mit deiner DB abfragen willst. Um es einigermassen sicher zu machen, wirst Du wohl um eine Art Thesaurus nicht herumkommen, wie es Georg V schon vorgeschlagen hat. Schliesslich gibt es nicht nur solche Fälle wie „schreiben“ -> „schreib“, sondern auch sowas: die Suche nach „PC“ soll ja wahrscheinlich auch „Computer“ finden oder bei „Motherboard“ soll „Hauptplatine“ gefunden werden, das Problem der Synonyme. Von den Homonymen („Leiter“ zum Hochsteigen elekrischer „Leiter“) will ich jetzt gar nicht erst anfangen.
Aber wie professionell soll es denn sein, denn 100% Trefferquote wirst Du eh nicht erreichen können (jedenfalls nicht mit einem vertretbaren Aufwand, oder Du bekommst dann eben eine Menge „Fehltreffer“ mit rein).
Du könntest natürlich die Verben bei der Suche um die Endungen kürzen also statt " schreib en" gleich „schreib“ nehmen, aber das bringt dich in solchen Fällen wie „backen“ -> „Bäckerei“ oder „singen“ -> „Gesang“ oder gar „singen“ -> „Lied“ nicht weiter.

Viele Grüße
Marvin

HI!

bitte warum erzählst Du nicht direkt, was Du gemacht hast,
dann wäre auch die Aufgabenstellung klarer:

Ich dachte ich habe mich klar ausgedrückt.
Ich kann das nicht anders erklären, als ich es scho gemacht habe.
> ARRAY[] alle Wörter der DB
> similar_text > Prozentwert zu Suchbegriff und Array[Index]
> sort > höchster Wert wird angezeigt!

Warum erstellt diese Tabelle im Memory und nicht in der
Datenbank? Dann könntest Du diesen Prozentwert direkt nach den
neusten Ergebnissen modifizieren.

Ich verstehe nicht warum in die DB, denn die similar_text() funktion berechnet den Prozentwert in Abhängigkeit zu dem Suchwort. Deshalb, dieser Prozentwert ist immer unterschiedlich von Suchbegriff zu Suchbegriff.

Wichtig wäre auch, dass man Eingabewörter, die keine oder nur
wenige Treffer hat speichert, um das System ggf.
umprogrammieren zu können. Also wirst Du später nicht nur
Wörter haben, die in Deiner Datenbank existieren sondern auch
Fehlschreibweisen.

Das klingt logisch, einleuchtend… So wie nach dem Prinzip Genetator und Generator… Werde ich mir überlegen.

Fehlschreibweisen (Hinweis bei Genetator auf das
möglicherweise richtieg Wort Generator) kann man übrigens
besser mit Levinstein-Distanz berechnen, aber dies ist auch
eine teure Funktion.

Levinstein-Distanz - habe ich ehrlich gesagt noch nie was gehört.

Wie geht dieser Algorithmus?
Beim googeln konnte ich nur wenig, bzw. keine hilfreichen Artikel finden.

Grüsse,
Sebastian

Levinstein-Distanz - habe ich ehrlich gesagt noch nie was
gehört.

Wie geht dieser Algorithmus?
Beim googeln konnte ich nur wenig, bzw. keine hilfreichen
Artikel finden.

Hallo Sebastian,

womit wir wieder beim Thema wäre: Der Mathematiker heist offiziell Levenshtein. :smile:

Womit ich mich offiziell beim Ihm wegen Fehlschreibweise seines Namens entschuldige.

MfG Georg V.

Hi Georg.

womit wir wieder beim Thema wäre: Der Mathematiker heist
offiziell Levenshtein. :smile:

Danke dir… levenshtein() -> PHP Funktion.

Werde ich gleich mal ausprobieren.

Gruss,
Seb