Horst: Stichworte Benutzer emöglichen

Beitrag lesen

Hallo,

Nun möchte ich den Besuchern auf meiner Seite zusätzlich ermöglichen, über die Eingabe von Suchbegriffen, sich passende Einträge anzeigen zu lassen. Dabei soll per SQL Befehl sowohl der Titel als auch die Kurzbeschreibung auf das oder die vom Besucher eingegeben Suchbegriffe hin verglichen werden und nur die Einträge angezeigt werden, die entweder im Titel oder in der Kurzbeschreibung eines der eingegebenen Suchworte aufweist.

Es ist leider so, dass es kein RDBMS gibt, was eine Volltextsuche mit komplexen Suchausdrücken (AND, OR, NEAR und so und das auch noch geschachtelt und geklammert) in sich implementiert hat.

In meiner Praxis verwende ich für eine Volltextsuche das Perl-Modul Text::Query, womit ich Tabellen einfach nur durchscanne. Bis in etwa 20.000 Datensätzen funktioniert sowas einigermaßen performant. Der Besucher kann komplexe Suchterms eingeben im Stil von Altavista (+zeigdas -dasnich => zeigt alle Dokumente, in denen das Wort "zeigdas" vorkommt, nicht jedoch "dasnich").

Mehr Performanze kanns geben, wenn die Suche eingeschränkt werden kann auf bestimmte Felder (auf denen ein RDBMS-spezifischer Index liegt) und Case sensitive.

Eine andere Möglichkeit, dem Besucher mehr Komfort zu bieten, besteht darin, ein Stichwortverzeichnis, sozusagen einen Index zu erstellen, welcher über dem gesamten Content oder Teile dessen liegt (Beispiel: Title-Tag, Body-Tag). Ein solcher Index wird asynchron aktualisiert über einen Cronjob oder händisch oder Trigger.

Ein Benutzer-Frontend stellt z.B. die Anfangsbuchstaben aller Worte dar als Link, ein Klick auf den Buchstaben listet alle Schlagworte auf, die mit dem ausgewähltem Buchstaben beginnen und zeigt daneben die jeweiligen Links an, in denen das Wort vorkommt.

Ajax bietet weitere Möglichkeiten, siehe Beispiel google/suggest: Der Besucher gibt die Anfangsbuchstaben seines Suchwortes ein und kriegt eine Liste mit passenden Ergänzungen. SQL like ist hier Dein Freund.

Ansonsten, was Suche in RDBMS betrifft, siehe Post von Vinzenz, speziell schaue nach der Art von Indizierung was das RDBMS zu bieten hat.

Viele Grüße,
Hotte