Startseite / 6. bwl collection / Standort: 6.4 Suchroutine.


-

bwl search engine - Beschreibung

Für das Partnerprojekt Link extern: wai-austria hatten wir schon längere Zeit nach einer geeigneten Suchroutine für die interne Projektsuche Ausschau gehalten.

Der Einbau in ein bestehendes Projekt sollte auch für weniger geübte Benutzer möglich sein, die Konfiguration keine höheren Programmierkenntnisse erfordern und das script sollte sich problemlos in die Module der bwl collection integrieren lassen. Die Einhaltung der Webstandards setzten wir voraus.

Die angebotenen Programme gingen aber entweder weit über unsere Anforderungen hinaus, waren in den Konfigurationsmöglichkeiten zu unflexibel oder entsprachen nicht unseren Auffassungen zu Problemen der Barrierefreiheit.

Nachdem wir einige Fertiglösungen getestet hatten, entschloss ich mich, ein eigenes Suchwerkzeug zu entwickeln.

Allgemeines

Die Suchroutine basiert auf einer Volltextsuche (Zeichenkettenvergleich) und kommt ohne Index oder Datenbank aus.

Das Script sucht nach Einzelbegriffen, Phrasen oder nach 2 UND-verknüpften Begriffen oder Phrasen. Kombinationen sind möglich.

Die Suche beginnt standardmäßig im Wurzelverzeichnis des Web-Projektes und erfasst alle darunter liegenden Verzeichnisse und Unterverzeichnisse.

Sinnvolle Konfigurationsmöglichkeiten lassen eine individuelle Anpassung an das Projekt oder die eigenen Bedürfnisse zu. Dies betrifft sowohl die zu durchsuchenden Verzeichnisse, als auch die zu berücksichtigenden Dateien oder Dateitypen.

Das eigentliche Such-Script und die Konfigurationsdatei liegen in den zur bwl collection gehörenden Verzeichnisstrukturen. Die Ausgabe der Treffer erfolgt innerhalb einer Datei, die in einem beliebigen Verzeichnis unterhalb des Wurzelverzeichnisses der Domain (root) liegt.

Auf Grund der Zeichenkettensuche zur Laufzeit des Scriptes ist das Modul für kleinere bis mittlere Projekte geeignet. Erfahrungen zum Zeitverhalten liegen bislang jedoch nicht vor.

Konfiguration

Die individuelle Anpassung wird über die Konfigurationsdatei vorgenommen.

1. Verzeichnisebene für Suchvorgang

Der Startpunkt für die Suche kann individuell gewählt werden. Neben dem Wurzelverzeichnis des Projektes lassen sich auch Verzeichnisse der 1. oder 2. Ebene als Ausgangspunkt für die Suche definieren. Das gewählte Verzeichnis wird dabei notwendigerweise mit durchsucht.

Beispiel:

  • Gewähltes Verzeichnis: / (root)
    Berücksichtigt werden alle Dateien im Wurzelverzeichnis und die darunterliegenden Verzeichnisse und Unterverzeichnisse.
  • Gewähltes Verzeichnis: /html
    Durchsucht werden alle Dateien im Verzeichnis 'html' sowie die darin befindlichen Verzeichnisse und Unterverzeichnisse.
  • Gewähltes Verzeichnis: /html/tipps
    Die Suche beginnt im Verzeichnis 'tipps' und erfasst die darin befindlichen Dateien und Ordnerstrukturen.

2. Verzeichnisse der 1. Ebene definieren

Für die 1. Verzeichnisebene lassen sich entweder beliebige Verzeichnisse von der Suche ausschließen oder alternativ dazu Verzeichnisse für die Suche definieren.

Die Auswahl, welche Regel befolgt werden soll, wird über eine zu setzende Variable getroffen.

Diese Auswahlmöglichkeit macht in zweierlei Hinsicht Sinn:

In relativ statischen Projekten, wo es nur wenige Verzeichnisse in der 1. Ebene gibt, ist die Angabe der zu durchsuchenden Verzeichnisse vorteilhaft. Das Script liest dann nicht erst die vorhandene Verzeichnisstruktur ein, sondern kann gleich mit der Suche beginnen. Alle nicht genannten Verzeichnisse werden dabei grundsätzlich ausgeschlossen.
Nachteilig kann sein, dass bei dieser Variante die zu berücksichtigenden Unterverzeichnisse extra angegeben werden müssen.

Neben einem kleinen Zeitvorteil für den Suchvorgang kann diese Variante auch Tipparbeit ersparen. Sie ist daher auch für Projekte geeignet, bei denen viele Verzeichnisse von der Suche ausgeschlossen werden sollen.

In dynamischen Projekten, bei denen sich die Verzeichnisstruktur häufig ändert, ist dies jedoch unpraktisch. Hier bietet es sich eher an, alle auszuschließenden Verzeichnisse der 1. Ebene zu benennen. Darin befindliche Unterverzeichnisse werden dann ebenfalls von der Suche ausgeschlossen.

Alle nicht definierten Verzeichnisse, auch Unterverzeichnisse, werden dagegen beim Suchvorgang berücksichtigt. Das Script passt sich der vorhandenen Ordnerstruktur an.

3. Verzeichnisse der 2. Ebene ausschließen

Für den seltenen Fall, dass Verzeichnisse der 2. Ebene in verschiedenen Ordnern der 1. Ebene ausgeschlossen werden müssen, lassen sich diese über die Pfadangabe "Verzeichnis/Unterverzeichnis" direkt ansprechen. Gleichnamige Ordner der 2. Ebene lassen sich somit auch selektiv ansprechen.

Beispiel:

/html/test/
/programme/test/

4. Dateitypen definieren

Für die Definition der zu durchsuchenden Dateitypen gibt es ebenfalls 2 Varianten. Die anzuwendende Regel wird wieder über eine Variable mit Schalterfunktion bestimmt.

In der Varinante "excludieren" können alle Dateiendungen aufgelistet werden, die von der Suche ausgeschlossen werden sollen. Das können zum Beispiel mp3-, doc-,xml-, txt- oder zip-Dateien sein. Alle nicht genannten Dateitypen werden durch die Routine erfasst.

Für die Variante "includieren" müssen dagegen nur die Dateitypen angegeben werden, welche durchsucht werden sollen. In der Regel werden das htm-, html-, shtml und php-Dateien sein. Alle nicht genannten werden ausgeschlossen.

Welche Variante sinnvoll ist, hängt vom Projekt ab.

5. Dateinamen definieren

Oft gibt es in den Projekten Dateien, deren durchsuchen wenig Sinn macht. Als Beispiele mögen die eigenen Error-Dateien (403, 404) und die Suchseite selbst genannt sein. Aber auch Testdateien können dazu zählen.

Sollen einzelne Dateien von der Suche ausgeschlossen werden, lassen sich diese exakt definieren. Dazu wird der vollständige Dateiname in die Konfigurationsdatei eingetragen (Beispiel: test.php).

6. Gleichnamige Dateien unterscheiden und ausschließen

Nicht selten existieren gleichnamige Dateien in unterschiedlichen Verzeichnissen. Über den Dateinamen lassen sich diese Dateien nicht selektieren.

Um dies zu realisieren besteht die Möglichkeit, eine Textmarke zu definieren, die an den Beginn des Quelltextes der betreffenden Datei gesetzt wird.

Voreingestellt ist die Zeichenkette ´<!-- kein Index -->´.

Wird diese Markierung durch das Script gefunden, wird die Datei nicht durchsucht. So lassen sich einzelne oder gleichnamige Dateien von der Suche selektiv ausschließen.

7. Mindestzeichenzahl des 1. Suchbegriffes

Die Mindestanzahl an Zeichen für den 1. Suchbegriff oder die 1. Phrase kann bestimmt werden. Fast regelmäßig ist dieser Wert auf 3 gesetzt, was auch hier die Vorgabe ist.

Für den 2. Suchbegriff oder die 2. Phrase gibt es keine Festlegung.

Während ein einzelner Suchbegriff mit weniger als 3 Zeichen wenig Sinn macht, kann eine Suche nach "Hommingberger Dorfstraße+123" (für einen Teil der Postleitzahl) realistisch sein.

Allerdings ist das Beispiel insofern schlecht gewählt, weil es weder Hommingberg noch die Hommingberger Gepardenforelle gibt.

8. bad word - Liste

Möchte man einzelne Suchbegriffe oder Zeichenketten von der Suche ausschließen, lassen sich diese in der Konfiguration definieren. Diese Begriffe werden durch das Script "übersehen" und gehen nicht in das Suchergebnis ein.

9. PHP-Quelltext entfernen

Damit der Inhalt von HTML-Anweisungen nicht in das Ergebnis eingeht, werden vor Beginn des Suchvorganges alle HTML-Tags entfernt. Probleme bereiten in diesem Zusammenhang PHP-Abschnitte, die sich innerhalb von HTML-Anweisungen befinden.

Es kann in der Konfiguration festgelegt werden, ob diese PHP-Quelltextteile entfernt werden sollen. Dazwischen liegende Textabschnitte werden allerdings ebenfalls berücksichtigt. Da php-Abschnitte jedoch überwiegend dynamischer Natur sind und weniger der Ausgabe statischen Inhaltes dienen, erscheint dies von untergeordneter Bedeutung.

Bei reinen HTML-Seiten kann diese Funktion abgeschaltet werden, bei PHP-Seiten sind Vor-und Nachteile abzuwägen.

10. Suchbereich definieren

Über eine Start- und eine Endmarke kann für die Seiten ein Suchbereich festgelegt werden. Damit läßt sich zum Beispiel der Navigationsbereich oder eine Fußzeile aus der Suche ausklammern. Gesucht wird dann nur zwischen den frei zu definierenden Marken.

Beispiel für Start-Marke: "<h2>"
Beispiel für End-Marke: "<div id="navigation">"

Der zu durchsuchende Bereich wird in diesem Beispiel auf die Inhalte beschränkt. welche zwischen dem Beginn der Überschrift 2. Ordnung und dem Beginn der Navigation liegen.

Diese Funktion setzt gut strukturierte Dokumente und ein einheitliches MarkUp voraus.

11. Seitenbeschreibung und Schlüsselwörter

Ob die Seitenbeschreibung (Description) und / oder die Schlüsselwörter (keywords) in das Suchergebnis eingehen sollen, kann einzeln festgelegt werden.

12. Anzeige der Seitenbeschreibung

Über die Konfiguration kann eingestellt werden, ob in der Trefferliste die Seitenbeschreibung ausgegeben wird. Das macht jedoch nur Sinn, wenn die Seitenbeschreibung den tatsächlichen Inhalt des Dokumentes repräsentiert.

13. Konfiguration der Trefferliste

In Abhängigkeit der Seitengestaltung und persönlicher Vorlieben kann die Trefferliste als Folge von Textabsätzen, als geordnete oder ungeordnete Liste ausgegeben werden.

Alle 3 Varianten gelten als weitgehend zugänglich für assistive Programme und berücksichtigen somit die Anforderungen an Barrierefreiheit.

14. Unterdrückung von Phrasen in Seitentitel

In der Trefferliste wird der META-Titel des Dokumentes ausgegeben. Dieser enthält oft aus guten Gründen bestimmte Wortgruppen, die in mehreren Dokumenten oder auch im gesamten Projekt als Standardbestandteil enthalten sind. Für die externen Suchdienste mag das gut und richtig sein, für die interne Trefferliste ist das jedoch störend.

Um die Trefferliste von unnötigem Ballast zu befreien besteht die Möglichkeit, typische Wortgruppen zu definieren, die bei der Ausgabe im Titel unterdrückt werden.

Vergleichen Sie dazu innerhalb dieses Projektes die Titelzeile der Trefferliste mit dem Seitentitel des betreffenden Dokumentes.

15. Sprachauszeichnung

Welche Informationen in der Trefferliste ausgegeben werden, ist in den von uns untersuchten oder getesteten Suchroutinen unterschiedlich.

Fast durchgängig zeigte sich jedoch, dass weder im Seitentitel noch in der Seitenbeschreibung eine Sprachauszeichnung erfolgte. Auch in den ausgegebenen Inhaltsfragmenten, in denen man die Sprachauszeichnung noch am ehesten vermuten könnte, fehlte sie.

Das gegenständliche Script ermöglicht die Sprachauszeichnung von fremdsprachlichen Begriffen sowohl im Titel, als auch in der Seitenbeschreibung.

Es handelt sich um eine automatische, zur Laufzeit des Scriptes eingefügte Auszeichnung mit all ihren Vor- und Nachteilen. Die Konfiguration erfordert ein gewisses Fingerspitzengefühl, das Wissen um praxisgerechte Sprachauszeichnungen sowie Grundkenntnisse über die Besonderheiten eines Zeichenkettenvergleich mit Ersetzung.

In der Grundversion sind Englisch und Französisch implementiert.

Die Sprachauszeichnungen lassen sich getrennt zu- oder abschalten, Besonderheiten des verwendeten HTML-Standards können berücksichtigt werden.

16. Zustellung der Suchergebnisse und Logdatei

Das Script kann bei jedem Suchvorgang eine e-mail an eine zu konfigurierende Adresse versenden, welche über Suchbegriff, Anzahl der gefundenen Dokumente sowie Datum und Uhrzeit informiert. Diese Funktion läßt sich abschalten.

Parallel dazu wird durch das Script eine Logdatei mit den eben genannten Daten befüllt.

Konfiguration kontrollieren

Auch wenn die Konfigurationsdatei auf Grund der Kommentare und Erläuterungen weitgehendst selbsterklärend ist, kann sie nicht den Gesamtüberblick bieten, den man sich im Rahmen einer Abschlusskontrolle wünscht.

Hat man alle Verzeichnisse berücksichtigt, gibt es vielleicht Dateien, die man übersehen hat? Welche Einstellungen hatte man doch gerade vorgenommen?
Ja, eine Gesamtübersicht aller Einstellungen, verbunden mit einer einfachen und eindeutigen Beschreibung, welche über die knappen Kommentare hinausgeht, wäre wohl wünschenswert.

Nun ist die Anzeige aller vorgenommenen Einstellungen eigentlich schon hilfreich, aber welche praktischen Auswirkungen haben die Einstellungen auf den Suchvorgang wirklich? Wäre es nicht gut, auch hier testen zu können, was "unter dem Strich" für den Benutzer dabei herauskommt?

Als ich den Gedanken weiterführte, zeigte sich schnell, dass einige nützliche Informationen das Leben sehr erleichtern könnten. So entstand aus ganz praktischen Erwägungen heraus ein Test- und Diagnose-Script, welches dem Suchmodul beigegeben wurde.

Konfiguration - Sollwerte

Zunächst liefert das Programm beim Aufruf die Werte, die als Vorgabe konfiguriert wurden. Dazu liest es die Konfigurationsdatei aus und stellt die Werte in übersichtlicher und erklärender Weise dar.
Mit einer Ausnahme: Das Programm sucht auch nach den Dateien, welche mittels einer Quelltextmarke von der Suche ausgeschlossen wurden und listet sie auf.

Diese "Soll-Konfiguration" ist in die Abschnitte "Verzeichnisse", "Dateien", "Zeichenketten" und "Sonstiges" gegliedert.

Die Auswirkungen der vorgenommenen Einstellungen auf den Suchvorgang liefert der zweite Teil des Programms.

Konfiguration - Istwerte

Im Abschnitt "Verzeichnisse" werden die tatsächlich zu durchsuchenden Verzeichnisse ausgegeben. Das ist besonders dann von Interesse, wenn man die auszuschließenden Verzeichnisse definiert hat.

Der Abschnitt "Dateien" liefert eine vollständige Übersicht aller im Projekt vorhandener Dateien, die in den Suchvorgang einbezogen werden.
Nützlicher Nebeneffekt: So lassen sich auch Dateien finden, die man übersehen hat oder die ohnehin im Projekt nichts mehr zu suchen haben.

Der dritte Abschnitt widmet sich der Anzeige der Daten, die in der Trefferliste ausgegeben werden können: Seitentitel und Seitenbeschreibung.

Der Seitentitel, der als Titel des Browser-Fensters für die Benutzer grafischer Oberflächen eher eine untergeordnete Bedeutung hat, ist jedoch für Nutzer alternativer Ausgabegeräte von weit größerer Wichtigkeit. Er gehört zu den Informationen, welche diese Nutzer als erstes erhalten.

Die Seitenbeschreibung dagegen ist eine Information, die für den Besucher einer Web-Seite normalerweise nicht sichtbar ist und nur über einen Blick in den Quelltext erlangt werden kann. Suchmaschinen können jedoch diese Seitenbeschreibung anzeigen. Sinn dieser Seitenbeschreibung ist es, eine kurze Zusammenfassung des wesentlichen Inhaltes einer Seite zu liefern.

Beide Meta-Informationen haben aber für Nutzer von Sprachausgaben im Rahmen von Trefferlisten einen Nachteil: Sie enthalten keine Sprachauszeichnungen.

Selbst wenn man sich daher im Seitentitel und in der Beschreibung um deutsche Begriffe bemüht, wird das nicht in allen Fällen möglich sein.

Um Verständlichkeit und Gebrauchseigenschaften der Ausgabe des Suchergebnisses zu erhöhen, wurde für die Trefferliste die Sprachauszeichnung vorgesehen. Nachteilig ist dabei jedoch, dass Vollständigkeit und Richtigkeit nur im Quelltext sichtbar sind.

Um die korrekte und vollständige Sprachauszeichnung kontrollieren zu können, werden die ausgezeichneten Begriffe mittels Begrenzungszeichen sichtbar gemacht. So erhält man schnell einen Überblick, wo eventuell Handlungsbedarf besteht und die Sprachdateien anzupassen sind.

Da für den Seitentitel und die Seitenbeschreibung aus verschiedenen Gründen selbstgesetzte Längenbegrenzungen sinnvoll sind, wird die jeweils aktuelle Zeichenzahl zur Information ausgegeben.

Die Kontrollausgabe aller Titel und Beschreibungen erwies sich auf den zweiten Blick als echter "Renner".

Durch die Anzeige aller Titel und Seitenbeschreibungen in "komprimierter Form" fallen Nachlässigkeiten oder unbedachte Formulierungen sofort auf. Über diesen Weg kann man also nicht nur die Dateien für den internen Suchvorgang optimieren, man erreicht auch eine Verbesserung seiner Webseiten für die großen Suchmaschinen.

Schwerer wiegen allerdings die Vorteile für alle Benutzer, die auf Grund eines aussagefähigen Seitentitels und einer zutreffenden Seitenbeschreibung besser in die Lage versetzt werden, für sie relevante Dateien aus der Trefferliste auszuwählen. Es muß bedacht werden, dass die Seiten mit dem häufigsten Vorkommen des Suchbegriffs nicht zwangsläufig auch die Seite ist, die dem gesuchten Inhalt am nächsten kommt.

Das Testprogramm ist damit nicht nur ein nützliches Werkzeug zur optimalen Konfiguration der Suchroutine, sondern unterstützt auch die Optimierung des Web-Angebotes im allgemeinen.

Ausblick

Nicht berücksichtigt ist in der gegenwärtigen Version die Begrenzung der ausgegebenen Anzahl an Treffern pro Seite. Diese Funktion halten wir jedoch aus Gründen der Benutzbarkeit für sinnvoll.


Textanfang - Seitenanfang.

bwl projekt manager v.5.03.10
by - KE-

Letzte Änderung: 27.02.2008