banner.jpg
Web-Development und Tools Powered by WebSellerTM

 

Home

Praxis-Tips
  Umlaute/UTF-8
  Normalisierung
  OemToAnsi
  MySQL-Import
  Site-Suche
  City Desk
  DynDNS
  MXLookup
  SPAM

SDT

Support
  Downloads
  Kontakt

Impressum

Englisch

RSS Feed

Suche:

Web Search

Made with CityDesk


Site-Suche

Von Uwe Holz
Letzte Änderung: Sonntag, 19. Oktober, 2003

Mehr Informationen zur Suche im Web, entsprechenden Technologien und Diensten finden Sie auf http://www.google.de.

Eine wesentliche Eigenschaft gut strukturierter Webseiten ist die Möglichkeit einer lokalen Suche. Diese sollte sich lediglich auf den Bereich der besuchten Seite beschränken. Dazu gibt es einige Tools und auch die Option, die Suche auf bekannte Suchmaschinen wie Google zu verlagern. Der Haken dabei ist die Aktualität der gefundenen Ergebnisse, sofern man dabei die Indexierung der Seite nach Updates nicht selbst in der Hand hat. Der nachfolgende Beitrag zeigt die Implementierung einer lokalen Suche mittels WebSeller. Dass dieses CGI-Tool weit mehr als ein Shop-Baukasten ist, wurde im Beitrag Forumware bereits unter Beweis gestellt.

Funktionsweise

Alle effektiven und schnellen Suchverfahren beruhen auf einem Index, der zuvor von der zu verwaltenden Seite angelegt wurde. Da der WebSeller nativen Zugriff auf MySQL bietet, wird im vorliegenden Fall dieser Index als MySQL_Tablle angelegt und benutzt. Daraus ergeben sich drei voneinander getrennte Funktionen, die vom WebSeller zu realisieren sind:

  • Indexaufbau:  /cgi-bin/webseller.cgi?action=reindex

  • Eigentliche Suche:  /cgi-bin/webseller.cgi?action=search ...

  • Anzeige der gefundenen Seiten:  /cgi-bin/webseller.cgi?action=showresult ...

Alle drei Funktionen hat der WebSeller sozusagen an Bord. Der Aufbau des Index muss stets dann aufgerufen werden, wenn die Webseite verändert wurde. Das erfolgt also per Hand und üblicherweise nicht als Link aus der Webseite heraus. Es muss lediglich die Funktion (action) anzugeben:

http://<mydomain>/cgi-bin/webseller.cgi?action=reindex

Die anderen Funktionen werden dann in die Webseite integriert. Sie benötigen folgende weitere Parameter:

  • Response - Html-Template, das zur Generierung der Antwortseite dient.
  • FailResponse - Html-Template, das zur Generierung der Antwortseite im Fehlerfall dient.
  • Section - Setup-Sektion, die alle suchspezifischen Werte enthält.
  • Select - SQL-Anweisung, deren Ergebnismenge zur Generierung der Antwortseite auf der Basis des vorgegebenen Templates benutzt wird.
  • Id - Tracking-ID zur Identifizierung der aktuellen Sitzung bzw. des Benuters.

Einbindung der Suche in die Webseite

Der Aufruf der Suche ist sinnvollerweise in die Navigationsleiste der Webseite zu integrieren. Dabei muss der Webseller mittels POST-Request aufgerufen werden, z.B.:

<form method="post"
  action="/cgi-bin/webseller.exe?action=Search&ID=-ID-&select=HTMLSEARCH
  &response=search/resultview.html&failresponse=search/resultfail.html
  &section=htmlsearch&language=ger">
    <p>Suche:<br>
    <input type="text" name="searchtext" size="6">
    <input type="image" src="cgi-htm/images/go.gif" value="Suche">
    </p>
</form>  

Das im Skript definierte Ergebnis-Template resultview.html kann an das jeweilige Layout der Webseite angepasst werden, muss aber WebSeller-Tags enthalten, die das Skript in die Lage versetzen, die Ergebnislisten aufzubauen. Hier ein Beispiel:

  <table>
  <!---startlist--->
      <tr>
        <td>
           <strong>-POSITION-.</strong>
        </td>
        <td>
          <a href="-LINK-">-TITLE-</a>&nbsp;
          <a href="-SCRIPT-HIGHLIGHTRESULT-">(Treffer hervorheben)</a>
        </td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>-ITEMDESCRIPTION-<br /></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td><i>URL: </i>-LINK-</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td><i>Datum: </i><!---(FROM_UNIXTIME(-PUBDATE-))--->
            <i>&nbsp;&nbsp;Gr&ouml;sse: </i>-FILESIZE- Bytes
        </td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
  <!---endlist--->
</table>
 

Die Möglichkeiten der Ergebnisanzeige können Sie auf dieser Webseite ausprobieren. Suchen Sie dazu einfach nach einem beliebigen Begriff. Die Suchfunktion des WebSeller wird hier genau so benutzt, wie im Text beschrieben. 

Webseller-Konfiguration

Voraussetzung für die hier beschriebene Lösung ist ein funktionierender Datenbankzugriff. Auf dem Server muss MySQL installiert und die entsprechenden Zugangsdaten bekannt sein. Prüfen sie das bitte ggf. mit Ihrem Internet-Service-Provider (ISP) ab und fragen Sie nach folgenden Daten:

  • MySQL-Host-Name
  • MySQL-Datenbankname
  • MySQL-Benutzername
  • MySQL-Passwort

Falls Sie das ganze erst einmal auf Ihrer Maschine testen wollen, so muss neben einem WebServer auch ein MySQL-Server auf Ihrem PC installiert sein. Passen Sie also Ihre Zugangsdaten in der Sektion [MYSQL] der Konfigurationsdatei webseller.ini an:

[MYSQL]
Host=<MySQL-Host-Name>
Database=<MySQL-Datenbankname>
User=<MySQL-Benutzername>
Password=<MySQL-Passwort>
...

Der Indexaufbau selbst wird durch Parameter bestimmt, die in der Sektion [HTMLSEARCH] definiert sind. Im einzelnen handelt es um diese Werte:

  • SEARCHTEXT - MySQL-Ausdruck der bei der Suche benutzt wird
  • TRASHTABLE - Tabelle, die alle ungültigen Begriffe enthält (Standard: trash)
  • FILEEXTENSION - Liste von Dateiendungen als Kriterium, welche Dateien bei der Indexierung berücksichtigt werden sollen (Standard: html;htm;php)  
  • EXCLUDE - Liste aller Verzeichnisse, die nicht berücksichtigt werden sollen (Standard: cgi-bin)
  • CONTENT_START - Muster innerhalb des HTML-Quelltextes, der den Beginn des relevanten Inhaltes markiert (siehe unten)
  • CONTENT_STOP - Muster innerhalb des HTML-Quelltextes, der das Ende des relevanten Inhaltes markiert (siehe unten)
  • HIGHCOLOR_START - Präfix (HTML-Quelltext) zur Markierung der Treffer innerhalb der gefundenen Seite (Standard: <span style=background-color:#00FFFF>)
  • HIGHCOLOR_STOP - Postfix (HTML-Quelltext) zur Markierung der Treffer innerhalb der gefundenen Seite (Standard: </span>)  
  • MAX_ITEMDESCRIPTION_SIZE - Maximale Länge der Kontextanzeige innerhalb der Ergebnisliste (Standard: 255)   

Die Werte CONTENT_START und CONTENT_STOP bestimmen massgeblich die Qualität der Suchergebnisse. Sie sollen verhindern, dass Zeichenketten, die in allen Dokumenten verwendet werden (Bezeichnungen von Navigationslinks, z.B. 'Home', gemeinsame Überschriften usw.), bei der Indexierung eingeschlossen werden. Content-Management-Systeme verwenden Templates, um das Layout und damit den Inhalt festzulegen, der in allen HTML-Dateien benutzt wird. Bei der Suche nach bestimmenten Dokumenten ist genau dieser Inhalt völlig uninteressant. Deshalb ist es empfehlenswert, Beginn und Ende des eigentlichen Inhaltes der entsprechenden Seite mit Kommentaren zu kennzeichnen, z.B:

<HTML>
...
<BODY>
...
<!-- CITY DESK BODY START -->
... Content ...
<!-- CITY DESK BODY END -->
...
</BODY>
</HTML>

Durch diese Vorkehrungen können Sie die Suche wesentlich beeinflussen. Ich selbst benutze CityDesk als Content-Manager und verwende in allen Templates die hier angeführten Kommentare, um den eigentlichen Inhalt zu kennzeichnen. Nachfolgend sehen Sie die  Werte der im Beispiel verwendeten Konfigurationsdatei webseller.ini:

[HTMLSEARCH]
SEARCHTEXT=( htmlindex.CONTENT LIKE '%-SEARCHTEXT-%' )
TRASHTABLE=trash
FILEEXTENSION=html;htm;php
EXCLUDE=/cgi-bin;/cgi-htm
CONTENT_START=<!-- CITY DESK BODY START -->
CONTENT_STOP=<!-- CITY DESK BODY END -->
HIGHCOLOR_START=<span style=background-color:#00FFFF>
HIGHCOLOR_STOP=</span>
MAX_ITEMDESCRIPTION_SIZE=255

Falls Sie Probleme beim Aufrauf des Skript haben, eine Fehlermeldung erhalten oder sich überhaupt nichts tut, so gehen Sie wie folgt vor:

  1. Prüfen Sie die Datei webseller.log in Ihrem Script-Root cgi-bin. Falls sie nicht existiert, sind Sie höchstwahrscheinlich in ein Zugriffsrecht-Problem gelaufen. Der WebSeller konnte entweder gar nicht starten oder die Logdatei nicht anlegen. Klären Sie in diesem Fall das Problem ggf. mit Ihrem ISP. Falls Sie die Logdatei finden, sollte sich in ihrem Inhalt ein Hinweis auf die Ursache des Problems finden.
  2. Lässt  der Inhalt der Logdatei auf ein MySQL-Zugriffs-Problem schliessen, klären Sie es ggf. mit Ihrem ISP.
  3. Falls die aufgeführten Schritte nicht zur Lösung führen, so senden Sie uns einfach eine E-Mail und fügen die Logdatei webseller.log mit an.

Hinweis: Der WebSeller-Skript ist eine plattformabhängige ausführbare Datei, deshalb muss die richtige Version installiert und aufgerufen werden :

  • Linux: /cgi-bin/webseller.cgi
  • Solaris: /cgi-bin/webseller.bin
  • Windows: /cgi-bin/webseller.exe

Beispieldateien

Die Dateien zur Implementierung der Suche auf dieser Webseite befinden im Download-Bereich. Passen Sie die genannten Werte für den Datenbankzugriff an und beachten Sie bitte, bei der Realisierung die Webseller-Version 3.1.132 (oder höher) zu benutzen. Für CityDesk-Benutzer liegen die Beispieldateien in Form eines CityDesk-Projektes im Archiv cityd-search.zip vor. Hier können Sie die Setup-Einstellungen bequem mittels CityDesk selbst anpassen. Öffnen Sie dazu das in der Zip-Datei enthaltene Projekt search.cty mit CityDesk und benutzen Sie den CityDesk-Dialog Variables (klicken Sie View > Variables) um folgende Werte zu setzen:

  • WSMysqlUser - MySQL-Benutzer für den Zugriff auf die Datenbank.
  • WSMysqlDatabase - Name der Datenbank.
  • WSMySQLPassword - MySQL-Password.
  • WSMysqlHost - Name der Maschine, auf der MySQL installiert ist, oftmals localhost, es sei denn, Ihr  ISP definiert einen anderen Wert.
  • WSScriptUrl - Name der plattformspezifischen WebSeller-Engine (/cgi-bin/webseller.exe, /cgi-bin/webseller.exe oder /cgi-bin/webseller.bin)