Webseiten mit ASP
Große Datenbestände verlangen nach extravaganten Suchfunktionen. Nur mit einer Volltextsuche können Anwender Produkte nach beliebigen Kriterien filtern.

- Webseiten mit ASP
- Teil 2: Webseiten mit ASP
- Teil 3: Webseiten mit ASP
Große Datenbestände verlangen nach extravaganten Suchfunktionen. Der Benutzer der Webseite muss in der Lage sein, die verfügbaren Produkte nach nahezu beliebigen Kriterien zu filtern. Das Nonplusultra dabei ist die Volltextsuche....
Große Datenbestände verlangen nach extravaganten Suchfunktionen. Der Benutzer der Webseite muss in der Lage sein, die verfügbaren Produkte nach nahezu beliebigen Kriterien zu filtern. Das Nonplusultra dabei ist die Volltextsuche.

Wenn es um die Warenpräsentation geht, verfolgt jedes Geschäft ein bestimmtes Ordnungsprinzip. Trotzdem gibt es Verkäufer, die bei der Suche nach Produkten helfen. Im Onlineshop übernimmt die komfortable Suchfunktion die Aufgabe des Verkäufers. Diese gehört mittlerweile zum guten Ton und hat entscheidenden Einfluss auf die Kundenzufriedenheit, Conversion Rate und somit auch auf den Umsatz. Im dritten Teil unserer Reihe dreht sich deshalb alles um das Suchen und natürlich das Finden.
Bevor die Volltextsuche in den Shop integriert werden kann, müssen die wichtigsten Funktionen dieser Suchart kurz definiert werden. Zunächst muss bestimmt werden, in welchen Datenfeldern überhaupt gesucht werden soll. Es macht keinen Sinn, alle Felder zu durchforsten. Das Feld seitenzahl, in dem die Anzahl der Seiten des Buches erfasst sind, ist beispielsweise völlig irrelevant für die Volltextsuche. Niemand wird ein Buch aufgrund seiner genauen Seitenzahl suchen. Gleiches gilt für den Namen des Produktbildes.
Felder dieser Art müssen nicht mit in die Suche einbezogen werden. Alle anderen machen Sinn, auch wenn es auf den ersten Blick nicht so aussieht. Beispiel: ISBN-Nummer bei Büchern. Sollte der Besucher ein Buch oder Medium auf genau diese Nummer hin suchen, lässt sich das über die Volltextsuche hervorragend bewerkstelligen, ohne dass weitere Suchmechanismen programmiert werden müssen.
Wörter und Wortfragmente
Wie sucht man überhaupt? Die meisten tragen einfach einen oder mehrere Suchbegriffe in das Eingabefeld und überlassen den Rest dem Programm. Sehr häufig wird dabei die Groß- und Kleinschreibung nicht beachtet, es steht dann beispielsweise ein Begriff "sekt" im Suchfeld und die Datenbank ermittelt ein Buch über Käfer (inSEKTen), eines über Schaumwein (SEKT), eines über religiöse 1007 48 internet magazin Glaubensgemeinschaften (SEKTen) und eines über das Zerlegen von Leichen zu Lehrzwecken (SEKTion). Der Besucher muss also darüber informiert werden, wie sein Suchbegriff verarbeitet wird und wie er gezielt verschiedene Optionen definieren kann.
Logische Verknüpfungen
Aus Suchmaschinen kennen Sie die logischen Verknüpfungen mehrerer Suchbegriffe. Ein UND sorgt dafür, dass alle eingegebenen Suchbegriffe zwingend im Datensatz enthalten sein müssen. Beim ODER wird eine Fundstelle auch dann angegeben, wenn nur einer der Suchbegriffe im Datensatz enthalten ist. Ein NICHT sorgt dafür, dass die Suchbegriffe auf keinen Fall im Datensatz stecken.
Solche Verknüpfungen vereinfachen das Finden nach bestimmten Daten ungemein. Stellen Sie sich vor, Sie möchten in einer Suchmaschine nach dem Schauspieler Helmut Schmidt suchen. Tausende von Seiten werden über unseren Altbundeskanzler angezeigt, das Suchen nach den passenden Daten wird zur Fleißarbeit. Mit der logischen Verknüpfung:
(Helmut UND Schmidt) UND NICHT (Bundeskanzler ODER SPD)
schließen Sie die meisten Seiten aus, auf denen zwar von Helmut Schmidt die Rede ist, die aber auch den Altbundeskanzler betreffen.
Suchfeld definieren
Sie sollten es dem Besucher einfach machen. Ihn mit Logik zu bemühen und ihm obendrein noch kryptische Sonderzeichen für den Aufbau einer logischen Abfrage zuzumuten, ist einerseits nicht sehr besucherfreundlich, andererseits viel schwieriger zu programmieren! Wir bauen deshalb die Suche nach dem Vorbild von Google auf.
Für UND, ODER und NICHT werden eigene Eingabefelder definiert und diese verständlich beschriftet. Die komplette Suchfunktion blenden wir unterhalb der angezeigten Liste der Bücher ein. So kann der Suchende die Liste sofort nach beliebigen Kriterien filtern.
Für die Volltextsuche definieren wir im HTML-Code jeweils ein Texteingabefeld für die drei logischen Verknüpfungen. Ein kurzer Erläuterungstext hinter den Eingabefeldern macht klar, um welche Art der Suche es sich handelt. Das Formular ruft nach dem Abschicken die Datei liste.asp erneut auf.
Über die ASP-Funktion REQUEST.FORM ("NameDesFormfeldes") werden die Einträge im Formular direkt auf Variablen im ASP-Code verteilt. Wurden keine Einträge in den Feldern gemacht, so sind die Variablen leer. Diesen Umstand machen wir uns zunutze, um die Filterungen nur dann auszuführen, wenn auch tatsächlich Einträge gemacht wurden.
Dieses Verfahren hat den Vorteil, dass automatisch alle Daten aus der Datenbank in der Liste erscheinen, wenn der Besucher keine Suchbegriffe definiert hat.
Wie wird gesucht?
Bei der Programmierung der Suchfunktion sind wir einen traditionellen Weg gegangen, der einerseits sehr einfach zu verstehen ist und andererseits beliebig Raum für weitere Erweiterungen der Suche verfügbar macht. Die Idee ist, dass zunächst der gesamte Datenbestand in verschiedene Arrays unter ASP eingeladen wird.

Aufgrund der heutigen Serverleistungen beeinträchtigt dieses scheinbar rechenintensive Verfahren die Leistung des Servers nicht spürbar. Sie können damit problemlos mehrere Tausend Produkte verwalten. Ist der Datenbestand erst einmal in den ASP-Arrays vorhanden, können wir alle denkbaren Operationen mit den Daten durchführen, so auch das Filtern.
Wir haben für jede Suchoperation ein eigenes Array definiert (fundstelleund, fundstelleoder, fundstellenicht und fundstellegenre). Jedes Element der Arrays wird am Anfang auf den Wert 1 gesetzt. Bei der späteren Listenanzeige wird geprüft, ob alle Fundstellen-Elemente den Wert 1 haben, nur dann wird das entsprechende Produkt in der Liste erscheinen.
So können wir jeden vom Benutzer gewünschten Suchvorgang einzeln abarbeiten. Wird z.B. ein Suchwort bei der UND-Suche nicht in einem Datensatz gefunden, so wird die entsprechende Kontrollvariable auf 0 gesetzt und das Produkt erscheint nicht in der Liste. Die Arrays haben wir großzügig auf 100 Elemente dimensioniert.
UND-Verknüpfung
Will ein Besucher den Datenbestand auf die Begriffe Ken, Follet und Wettlauf untersuchen, so tippt er im Feld der UND-Suche einfach diese drei Begriffe jeweils getrennt durch ein Leerzeichen ein. Nach Abschicken der Suche landet der String Ken Follet Wettlauf in der Kontrollvariablen sucheund. Das Programm kontrolliert nun, ob sucheund leer ist oder nicht. In diesem Fall ist die Variable nicht leer, also wird die Kontrollprozedur durchgearbeitet. Zunächst wird in Zeile 3 ein Array (sucheundwoerter) generiert, das in diesem Fall drei Elemente besitzt, jedes Element enthält jetzt einen der eingegebenen Suchbegriffe.
Danach wird eine Laufanweisung gestartet. Beim Einlesen der Daten in die verschiedenen Arrays haben wir eine Zählvariable z eingesetzt, damit die Indexwerte der Arrays immer um 1 erhöht werden.
In z befindet sich aus diesem Grund die genaue Anzahl der Produkte. Die Laufanweisung wird deshalb von 1 bis z definiert und somit werden alle Produkte der Reihe nach in die Kontrolle geschickt.
Die Hilfsvariable gefunden wird auf 1 gesetzt, da wir immer davon ausgehen, dass eine Suche erfolgreich ist. In Zeile 6 folgt nun eine weitere Laufanweisung. Da wir nicht wissen können, wie viele Suchbegriffe der Besucher tatsächlich eingegeben hat, arbeiten wir mit der FOR-EACH-Laufanweisung, die einfach die vorhandenen Elemente des Arrays sucheundwoerter abarbeitet.
Ganz gleich wie viele Suchbegriffe eingegeben wurden, jedes Suchwort muss in mindestens einem Feld eines Datensatzes vorkommen, sonst sind die UND-Bedingungen nicht erfüllt. In Zeile 7 wird mit einem Stringvergleich geprüft, ob das Suchwort in einem der Felder vorkommt. Ist das der Fall, wird der Wert von gefunden mit 1 multipliziert, bleibt also so wie er war. Ist die Suche fehlgeschlagen, wird gefunden mit 0 multipliziert.
Wenn auch nur einer der Begriffe nicht gefunden wird, bleibt der Kontrollwert ab sofort unwiderruflich auf 0. Dieses Produkt hat also in der gefilterten Liste nichts zu suchen! Und genau diesen Zustand übergeben wir nach Abarbeitung eines jeden Produkts in den Zeilen 13-17 in das Kontrollarray fundstelleund.
01 rem UND-Verknüpfung
02 if sucheund <>"" then
03 sucheundwoerter = Split(sucheund,"")
04 for i=1 to z
05 gefunden = 1
06 for each element insucheundwoerter
07 if instr(kennung(i),element)>0 or instr(titel(i),element)>0 or instr(autor(i),element)>0 or instr(originaltitel(i),element)>0 or instr(verlag(i),element)>0 or instr(covertext(i), element)>0 then
08 gefunden = gefunden * 1
09 else
10 gefunden = gefunden * 0
11 end if
12 next
13 if (gefunden=1) then
14 fundstelleund(i) = 1
15 else
16 fundstelleund(i) = 0
17 end if
18 next
19 end if