Chrisi: MySQL Volltextsuche, aber richtig ?

Hallo zusammen,

ich möchte gerne eine Volltextsuche in meiner Datenbank durchführen, weiss aber nicht wie ich es richtig anstelle. Die Suche soll sich auf 2 Spalten "ueberschrift u. beschreibung" beziehen und es sollen auch Verkettungen von Suchworten wie z.B. "php mysql" berücksichtig werden.

Habe hier 2 Möglichkeiten gefunden:

  1. MATCH() u. AGAINST(), hier sind mir aber die Ergebnisse zu exakt, weil es keinen Platzhalter wie % gibt, schön ist aber das er die Verkettungen von Suchworten kennt.

  2. LIKE, hier kommen zwar sinnvolle Ergebnisse zurück, aber es dauert sehr lang, und der Query kann bei mehren Suchworten sehr lang werden.

Kann mir vieleicht jemand sagen wie ich einen sinnvole Abfrage erstelle die in den 2 Spalten nach einem oder auch mehreren Suchworten sucht und die Ergebnisse anhand der Häufigkeit der Treffer durchsortiert ?

Gutes Beispiel wäre hier wohl die Abfrage die man bei google durchführen kann :)

Ich danke euch für jeden Tipp, Viele Grüße Chrisi

  1. Im Betreff noch die Version ...

    PS.: Für solche Sachen wäre eine Editfunktion nicht schlecht :)

  2. Hallo,
    also ich habe eine Volltext-Suchfunktion mit LIKE durchgeführt und bei ~3000 (Foren)-Beiträgen gibt es dort eigentlich keine Probleme, die Ergebnisseite wird sofort aufgebaut ohne lange Ladezeit.

    SQL:
    SELECT id FROM tabelle WHERE text LIKE '%$eingabe%' AND userid IN($userid) AND forenid IN($forenid);

    Es wäre Intressant wieviele Einträge du durchsuchen möchtest und poste hier mal die SQL Anweisung mit LIKE.
    Evt. liegt es auch am Server, dass dieser sehr langsam ist.

    MFG
    Andavos

    1. Hallo,

      danke für Deine Antwort.

      Meine Abfrage schaut in etwa so aus:

      SELECT EID,ueberschrift,bewertung
        FROM tab
          WHERE
           (ueberschrift LIKE = '%wort1%' OR beschreibung = '%wort1%')
          OR
           (ueberschrift LIKE = '%wort2%' OR beschreibung = '%wort2%')
          LIMIT start,limit

      Der Teil der WHERE Abfrage kann sich je nach Anzahl der Suchworte verlängern. Die Anzahl der Einträge beläuft sich im Moment auf ca. 10.000 Datensätze, es werden aber ständig mehr.

      Der Server hat keine "Hardwareschwächen", allerings möchte ich eine schonende Abfrage gestallten, da die User die Datenbank etliche male pro Tag abfragen und dies dem MySQL Server nicht gut tut :)

      Mir geht es hier mehr um die Richtigkeit der Abfrage und auch um die Sortierung der Ergebnisse nach Häufigkeit der gefunden Treffer.

      Viele Grüße, Chrisi ...

  3. Hallo Chrisi,

    das Beste (und Schnellste, aber auch aufwendigste) ist, Du erstellst Dir einen eigenen Index. Ich habe das gleiche Problem hier schonmal besprochen und erfolgreich gelöst.

    Gruß, Andreas

    --
    SELFFORUM - hier werden Sie geholfen,
    auch in Fragen zu richtiges Deutsch