Hi,
Wie funktioniert eine Volltextsuche theoretisch?
Indem man den vollständigen Text nach dem zu suchenden Etwas durchsucht ... ;-)
liest man jede Datei einzeln ein?
Das wiederum halte ich nicht für einen theoretischen, sondern für einen praktischen Aspekt der Angelegenheit.
Natürlich *kannst* Du jede Datei einzeln einlesen - und wenn die Komplexität der zu erstellenden Software minimiert werden soll, dann ist das womöglich die beste Lösung.
Oftmals aber sollen andere Aspekte optimiert werden, etwa die Suchgeschwindigkeit. Und dann ist es hilfreich, wenn man "investiert", also einen Teil der Arbeit bereits vor der eigentlichen Suche "präventiv" erledigt.
Die Volltextsuche des Archiv auf diesem Server (http://www.teamone.de/cgi-local/sfasuch.pl) trägt diesem Gedanken insofern Rechnung, als sie alle Dateien zu einer einzigen großen Indexdatei zusammenfaßt, in welcher ein eleganter durchsuchbarer Inhalt mit z. B. bereits vorbehandelten Zeichenketten abgelegt wird - Verzeichnistraversierung, Dateizusammenfassung etc. werden in den sporadisch durchgeführten Indexer-Prozeß verlagert, um den Suchvorgang (während dessen schließlich ein Anwender auf das Ergebnis wartet) zu entlasten, und auch die strukturelle Analyse der Zieldokumente (z. B. targets als Positionsmarkierungen eines Treffers innerhalb einer Datei) werden bereits beim Indexen so gut wie möglich berechnet und in einer leicht zugreifbaren Form in der Indexdatei abgelegt.
Das führt zu mehr und ggf. komplexer von einander abhängiger Software - aber zu besseren Ergebnissen (im Rahmen der Aufgabenstellung).
Wie ich nicht müde werde zu betonen, ist es also mal wieder die *Aufgabenstellung*, die zuallererst (und in höchstmöglichem Detaillierungsgrad) vorhanden sein muß, um bestimmen zu können, wie genau man sie am besten technisch realisiert. Eine kleine Änderung in der Aufgabenstellung kann einen komplett anderen Entwurf der Lösung bedingen.
mit welchem Befehl durchsucht man die Datein?
Je nachdem, wonach man sucht (laut Aufgabenstellung ;-).
Die Archivsuche sucht u. a. nach regulären Ausdrücken - also verwendet sie einen Mechanismus, der das kann (Perl, reguläre Ausdrücke).
wie kann man bewirken das nur Dateien mit der Endung .html eingelesen werden?
Indem man den Dateinamen vor dem Öffnen entsprechend prüft, vielleicht? ;-)
Oder indem man von vornherein nur nach Dateien mit einem bestimmten Namensmuster sucht (das geht jetzt in Richtung "find", egal ob Perl-Modul oder Shell-Kommando).
mfG - Michael