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
- Fremdanbieter: Provider für solche Website-Suchmaschinen
- ht://Dig (SourceForge)
- mnogosearch
- 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 support | enabled |
Supported handlers | gdbm ndbm |
Win98 mit PHP 4.1.1
DBA support | enabled |
Supported handlers | db3 |
Provider free.fr mit PHP 4.2.2
DBA support | enabled |
Supported handlers | ndbm 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......
|