Suchmaschinen
Home
Neuigkeiten
Bildung
Labor
Beruf
Freizeit
Mindmaps

Search this Website:

Aktuelles zu Suchmaschinen auf meinem WikiWiki.

1. Aufgabenstellung

Für meine eingene Website möchte ich eine Suchmaschine anbieten, mit denen der Besucher, zusätzlich zur ausgeklügelten Navigation auch über eine Volltextsuche über alle meine Webseiten möglichst direkt das finden kann, was er/sie sucht.

 

Die dafür eventuell erforderlichen technischen Komponenten auf der Server-Seite müssen sehr genau überlegt werden, denn ein billiger Web-Hosting-Provider bietet da nur sehr wenig.

 

Zur Zeit ist die eigene Website bei t-online gehostet. Als Provider mit PHP und MySQL steht auch free.fr zur Verfügung.

 

2. Lösungsmöglichkeiten

 

  1. Fremdanbieter: Provider für solche Website-Suchmaschinen
  2. ht://Dig  (SourceForge)
  3. mnogosearch
  4. siteIndexer  (SourceForge)

 

Siehe auch: http://www.searchtools.com

 

3. Lösungsarchitektur

Wichtig ist die Erkenntnis, das hier eine Schichtenarchitektur sinnvoll ist, wobei die untern dargestellten drei Schichten unterschiedliche systemtechnische Anforderungen aben und auch auch unterschiedlichen Systemplattformen laufen könnten.

3.1. Indexing - Harvesting

Man benötigt einen wirklich guten Indexer, der die Website wie ein Spider per HTTP-Protokoll durchläuft und dabei den auf der Oberfläche sichtbaren Text indiziert. Damit werden die Hyperlinks durchlaufen, dynamische inhalte (z.b. von PHP, ASP, JSP-Seiten) richtig behandelt, Zeichensätze (Umlaute) richtig beachtet und ggf. weitere Dokumenttypen (PDF, Word, Powerpoint,...) auch verarbeitet.

Das Ergbnis ist eine Dokumentliste und eine Wortliste.

Diese Komponente muss nicht notwendig als Web-Applikation laufen.

 

3.2. Schnelle Indexdatenbank

Die in der Stufe 1 (Indexing/Harvesting) gewonnenen "Rohdaten" werden jetzt veredelt und für den Zweck des schnellen Suchzugriffs optimiert aufbereitet.

Diese Komponente muss nicht notwendig als Web-Applikation laufen.

 

3.3. Schnelle Such-Oberfläche

Über ein HTML-Formular soll der Anwender seine Suchbegriffe eingeben. Das Suchergebniss soll dann als Fundstellenliste präsentiert werden. 

Diese Komponente muss zwingend als Web-Applikation laufen.

 

4. Lösungsauswahl

Für das russische mnogoserach spricht die Verwendung von PHP für die Search-Funktion.

Allerdings wird ein modifiziertes PHP benutzt, das man sich selbst durch Compilation erzeugen muss. Da die Lösung bei einfachen Providern laufen soll, scheidet diese Variante aus.

 

Für die Variante ht://Dig spricht:

Die sehr grosse Verbreitung und damit eine Sicherheit für eine mittelfristig gesicherte Nutzung

ht://Dig wird als Bestandteil der SuSE 8.0 Edition mit ausgeliefert (binary)

Eine Compilation unter Win98 mit Cygwin war auf Anhieb erfolgreich.

 

Nachteil bei ht://Dig ist nachwievor, dass die Such-Oberfläche als CGI-Executable realisiert ist. Nicht jeder Web-Hosting-Provider lässt "freie CGIs" zu.

 

Die Auswahl fiel trotzdem auf ht://Dig, da die Ausgereiftheit und Mächtigkeit der Funktionen sowie die solide Community einfach überzeugen. Der Nachteil der CGI-Suchoberfläche wird im Sinnne der Architektur in Kauf genommen, mit der Idee, dafür im Laufe der Zeit einen Austausch vorzunehmen. Die Idee ist, eine PHP-Suchoberfläche entweder direkt auf die Berkely-DB2-Datenbank zu setzten, oder die DB2 auf MySQL zu konvertieren und dann eine PHP-Oberfläche darauf zu setzen.

 

5. Lösung mit ht://Dig

 

5.1 Beschaffung

 

ht://Dig Version  3.1.6 wurde von sourceforge.net beschafft und zum Texten auf Win98 unter Cygwin umgewandelt.

Dabei hat der "Idiot's Guide to installing ht://Dig on Win32" sehr geholfen.

 

Die Produktiv-Version der Suchmaschine soll unter Linux (SuSE 8.0) laufen und dort war ht://Dig 3.1.5 bereits als Bestandteil der Erstinstallation vorhanden.

 

5.2 Konfiguration: htdig.config

 

max_head_length:           10000  --> 50000

max_doc_size:                200000

description_meta_names: description

keywords_meta_names:   keywords

maximum_word_length:    12 ---> 24

bad_extensions:            .mid .swf  .asf  .mp3

locale:                          de_DE

translate_quot:              true

 

5.3 Indexing

cd  /opt/www/htdig/bin
./htdig -v -c ../conf/htdig.conf
./htmerge -v -c ../conf/htdig.conf

5.4 Searching

 

  <form method="post" action="http://myserver/cgi-bin/htsearch">

      <input type="hidden" name="method" value="and">

      <input type="hidden" name="format" value="builtin-long">

       <input type="hidden" name="sort" value="score">

      <input type="hidden" name="config" value="htdig">

      <input type="hidden" name="restrict" value="">

      <input type="hidden" name="exclude" value="">

     <p>Search this Website:</p>

     <input type="text" size="15" name="words" value="" style="background-color: #99CCFF;">

     <input type="submit" value="Suchen">

   </form>

 

6. Erweiterungen

ht://Dig benutzt seit Version 3.1.0 als Datenbank "Berkeley DB2"  (http://www.sleepycat.com ).

Die Idee ist, mit PHP auf diese Datenbank zuzugreifen. Dazu muss ein PHP mit DBA-Unterstützung beim Web-Hosting-Provider vorhanden sein und dann als "DBA-Handler" db2 unterstützen. Tests mit phpinfo() ergaben:

 

SuSE 8.0 mit PHP 4.1.0

dba

DBA supportenabled
Supported handlersgdbm ndbm 

Win98 mit PHP 4.1.1

dba

DBA supportenabled
Supported handlersdb3 

Provider free.fr mit PHP 4.2.2

dba

DBA supportenabled
Supported handlersndbm db2

 

Erstes PHP-Script "phpdbatest1.php" zum Lesen der ht://Dig Berkeley DB2 Dokumentendatenbank

Näheres bei Colin Viebrock: http://www.devshed.com/Server_Side/PHP/Search_This/Page1.html

 

<?php

$id = dba_open("db.docdb","r","db2");

if ($id) {

   echo "<p>dba_open succsessful</p>";

   $key = dba_firstkey ($id);   

   $i = 0;

   while ($key != false) {

      $i = $i + 1;

      echo "$i: $key <br>";

      $key = dba_nextkey ($id);

   }

   echo "<h3>nextDocID: " + dba_fetch("nextDocID",$id) + "</h3>";

   dba_close($id);

} else {

   echo "dba_open failed\n";

}

?>

 

Testweiser Aufruf dieses PHP-Scripts.

 

 

Perl-Script zum Lesen der ht://Dig Berkeley DB2 Dokumentendatenbank

 

In www.cpan.org findet man das Perl Modul htdig-database-0.52 womit man mithilfe von Perl-Scripts in ht://Dig-datenbanken lesen kann. Diese aktuelle Version funtioniert auch mit ht://Dig 3.1.5 mit der Berkeley DB2 Datenbank.

 

Testaufruf:  

   cd \htdig\bin

   perl listdocdb -v ../conf/htdig.conf

 

Durch Beschäftigung mit diesem perl-Skript kann man sicher eine Menge über die Struktur der Datenbank lernen und die Erkenntniise auf PHP übertragen......

 

[Home]  [Neuigkeiten] [Bildung]  [Labor] [Beruf]  [Freizeit] [Mindmaps]

Dietrich Kracht. Copyright © 2006. All rights reserved. Page last modified: 2004-12-11 09:18:26