immi: MySql: Professionelle Volltextsuche

Beitrag lesen

Hallo Vinzenz

wie suchst Du? Nach was suchst Du? Wo ist der Flaschenhals genau?

zur Datenbank

  • ca 1 Mio Datensätze
  • zu Durchsuchender Eintrag besteht aus 5 - 10 Worten (keine langen Aufsätze)

zur Suche

  • Über ein Suchfeld können User einen oder mehrere Suchbegriffe (soll auf maximal  4 - 5 begrenzt werden) eingeben
  • Ein Treffer soll nur geliefert werden, wenn das Suchwort mindestens einmal exakt (abgesehen von Groß/Kleinschreibung) im zu durchsuchenden String vorkommt. (->  %LIKE% ist also nicht notwendig)
  • Es werden pro Seite 20 Ergebnisse angezeigt: MATCH ... AGAINST ... LIMIT 20
  • Für die benötigte Seitenanzahl werden alle Treffer gezählt: kein LIMIT

Der Flaschenhald

  • Die Suche geht sehr schnell, solange unter 1000 Ergebnisse gefunden (0.005s s) werden.
  • Wenn viele Ergebnisse (30.000) vorliegen wirds langsam (0.5 s)
  • Es gibt viele Suchbegriffe bei denen so viele Ergebnisse vorliegen
  • Bei mehreren Datenbankzugriffen pro Sekunde geht dann nicht mehr viel

Wenn die Suche nur bei vielen Ergebnissen langsam wird, dann kann das ja an der Sortierung der Suchergebnisse nach Relevanz liegen. Je mehr, desto aufwendiger. Ich würde auch gerne die Suche begrenzen auf 1000 Treffer. Niemand will sich 30.000 Treffer anschauen. Aber bei MATCH ..AGAINST muss er ja erstmal alle finden, um die Relevanz zu berrechnen und dann zu Sortieren.

Was vielleicht noch wichtig ist, ist dass sich die Anzahl an verschiedenen Suchbegriffen die Sinn machen auf, ein paar Tausend begrenzt. Nun könnte ich alle Query im Query-Cache speichern. Allerdings wird die Datenbank alle 60 min erweitert. Dadurch wird der Query-Cache wieder gelöscht.

der dortige Artikel ist schlimm, die dort vorgestellte Suche unbrauchbar, siehe </archiv/2010/3/t196217/#m1314709> und </archiv/2010/3/t196217/#m1315919>. Professionell ist anders.

Du kritisierst den Artikel vorallen wegen der Komprimierung. Diese Komprimierung scheint mir jedoch einen Performancevorteil zu bringen. Auch wenn dadurch die Güte der Ergebnisse verschlechtert wird.
Sieht man von der schlechten Komprimierung ab, sollte die Volltextsuche doch recht schnell laufen. Oder ist sie dann weiterhin unbrauchbar? (Wieso?)
Ist die Suche schneller als die MySQL-intern volltextsuche?
Ist die Variante mit den 3 zusätzlichen Tabellen üblich bei der Realisierung einer Volltextsuche? Oder geht das noch Professioneller/Schneller?

Grüße

immi