Leider wurde die Entwicklung von htdig scheinbar eingestellt, und so wurde ich gezwungen nach Alternativen zu suchen. Aber alles der Reihe nach: was will ich denn, ausser 12 Stunden Schlaf? Also; An unserer Schule werden alle Unterrichtsunterlagen in SVN-Repositories abgelegt, Um das Zusammenarbeiten der Lehrpersonen zu fördern soll es eine Suche über alle Unterrichtsmaterialien geben. So besteht die Chance, dass einiges an Doppelspurigkeiten vermieden werden könnte. Eine Recherche hat einiges an Kandidaten aufgezeigt: Sphinx schien ein wenig SQL-Lastig zu sein, Swish-e kannte ich schon und somit habe ich mich mal auf mnoGoSearch gestürzt. Für Unix ist mnoGoSearch gratis, open Source und sogar in Debian verfügbar.
Suchmaschinen Theorie
Das mit den Lokalen Suchmaschinen läuft immer ziemlich ähnlich und wurde auch schon an verschiedenen Stellen in diesem Blog besprochen (Beagle (neu) und xFriend (alt)). Ein Indexer liest alle Dateien und erstellt einen – ja was denn wohl? – Index. Damit er das kann, müssen alle Dateien in eine für ihn lesbare Form umgewandelt werden. Normalerweise ist „Lesbar“ Text oder HTML. Einige Suchmaschinen – wie beispielsweise Lucene oder Swish-e – erlauben auch XML um gewisse Felder zu bezeichnen, aber das ist eine andere Geschichte. Eine Suchoberfläche interagiert nun mit dem Index und versucht möglichst viele Seiten zu Finden und diese nach Relevanz geordnet dem Benutzer zu präsentieren.
Installation in Debian
Man muss sich schon bei der Installation von mnoGoSearch entscheiden, wo und wie man den Index ablegen will (sqlite. pgsql oder mysql). Dazu braucht es noch alle Helferskripts um die verschiedenen Formate zu indizieren, was in folgende Befehlszeile eskaliert:
catdoc ppthtml xlhtml texlive-extra-utils metacam \
poppler-utils mp3info vorbis-tools pstotext \
mnogosearch-common mnogosearch-sqlite
Umwandeln von verscheidenen Formaten in Text
Wie oben erwähnt müssen alle zu indiziernden Dateien in ein für den Indexer verwertbares Format gebracht werden. Bei mnoGoSearch sind dies Text oder HTML. Die Formatierung muss nicht erhalten bleiben und es reicht völlig aus, wenn möglichst viel vom Inhalt vorhanden ist. Das Umwandeln von Officedateien war schon mal Thema in diesem Blog, doch ich möchte einen Schritt weitergehen. Hie geht um den Stolz: Es sollen so viele Dateitypen wie möglich indizieren können. Wenn jemand noch weitere, nette Umwandlungen kennt bin ich froh für jeden Hinweis.
Mimetype Definitionen
In mnoGoSearch funktioniert es so, dass man zuerst in der Datei /etc/mnogosearch/indexer.conf für Dateiendungen Mimetypes vereinbart. Mir ist es sicher nicht standardkonform gelungen, aber wir wollen ja auch keine Haare spalten, oder?
AddType image/gif *.gif
AddType image/jpeg *.jpg *.jpeg *.JPG *.JPEG
AddType audio/mp3 *.mp3
AddType audio/ogg *.ogg
AddType application/zip *.zip *.jar
AddType application/tgz *.tgz *.tar.gz
AddType application/gnuzip *.gz
AddType application/bzip *.bz2
AddType application/compress *.Z
AddType application/rar *.rar
AddType application/tar *.tar
AddType text/plain *.txt *.pl *.js *.h *.c *.pm *.e *.php *.java *.vbs *.TXT .me .ME *.inc *.bat *.vb *.csv *.tsv *.sql
AddType text/html *.html *.htm
AddType text/rtf *.rtf
AddType application/msword *.doc *.DOC
AddType application/powerpoint *.ppt *.PPT
AddType application/vnd.ms-excel *.xls *.XLS
AddType application/msword2007 *.docx *.DOCX
AddType application/powerpoint2007 *.pptx *.PPTX
AddType application/vnd.ms-excel2007 *.xlsx *.XLSX
AddType text/tex *.tex
AddType text/x-postscript *.ps
AddType application/pdf *.pdf
Umwandeln von OOXML (docx, xlsx, pptx)
Für Microsofts OOCML von Office 2007 gibt es leider noch keine so einfache Lösung wie für die älteren Dateiformate. Ein „sauberer“ Weg würde wahrscheinlich über den ODF-Converter und/oder OpenOffice gehen, wie hier beschrieben. Ich wollte mir das nicht antun und mein einfacher Geist schrie nach einer einfachen Lösung (der Teil jedenfalls, der schreien kann, derjenige der für Kommandos zuständig war hat gerade geschlafen :irre2: ). Schnell war sie gefunden, die simple Lösung: OOXML-Dokumente sind Zip-Archive, damit kann man sie mit unzip entpacken und aus der entsprechenden XML-Datei die Tags entfernen. Gesagt, getan, getestet und Bier getrunken, da es zu funzen scheint:
docx2text:
unzip -p $1 word/document.xml | sed -e 's/<[^>]*>/ /g'
xlsx2text:
unzip -p $1 xl/sharedStrings.xml | sed -e 's/<[^>]*>/ /g'
pptx2text:
unzip -p $1 ppt/slides/slide*.xml ppt/notesSlides/notesSlide*.xml | sed -e 's/<[^>]*>/ /g'
Umwandeln des Rests
Der Rest ist Standard. Die Archive sind nicht schön gelöst, da sie eigentlich entpackt und jede Datei gesondert betrachtet werden müsste. Naja, das ist mnoGoSearchs Problem und so wie hier gelöst besser als nix:
Mime application/vnd.ms-excel text/html "xlhtml $1"
Mime application/powerpoint text/html "ppthtml $1"
Mime application/msword2007 text/plain "docx2txt $1"
Mime application/vnd.ms-excel2007 text/plain "xlsx2txt $1"
Mime application/powerpoint2007 text/plain "pptx2txt $1"
Mime text/rtf text/plain "unrtf $1"
Mime text/tex text/plain "detex"
Mime text/x-postscript text/plain "ps2ascii"
Mime application/pdf text/plain "pdftotext $1 -"
Mime image/jpeg text/plain "metacam $1"
Mime audio/mp3 text/plain "mp3info $1"
Mime audio/ogg text/plain "ogginfo $1"
Mime application/zip text/plain "unzip -l $1"
Mime application/tgz text/plain "tar tfz $1"
Mime application/tar text/plain "tar tf $1"
Mime application/gnuzip text/plain "gunzip -l $1"
Mime application/bzip text/plain "bunzip2 -l $1"
Mime application/compress text/plain "uncompress -l $1"
Mime application/rar text/plain "unrar-free -t $1"
mnoGoSearch Konfiguration
Nicht zu indizierende Dateitypen
mnoGoSearch bietet zur Beschleunigung die sogenannte Disallow Direktive. Dateien die auf diese Patterns passen, werden nicht indiziert. Hier sollte folgendes hinzugefügt werden:
Disallow *.dcr *.project *.swf *.dia *.db *.mdb
Ausserdem müssen alle Endungen die wir zusätzlich indizieren – und das ist ne Menge – aus der Konfiguration entfernt werden.
Umstellen auf Deutsch
Es gibt zwar eine I18N Version auf der mnoGoSearch Downloadseite, aber das ist Lug und Betrug und ausser einem einzigen, mikrigen String ist alles noch in Englisch. Im Template in /etc/mnogosearch/search.htm sind auch nicht alle Strings übersetzbar. Naja, selbst ist der Coder und das Resultat kann man natürlich downloaden: Deutsche mnoGoSearch Dateien.
- search.htm: I18N version mit allen Worten internationalisiert und den Stopwörtern aktiviert.
- search/lang.latin1.de.conf: Die deutsche Übersetzung
- synonym/german.syn: Synonymdatei, heruntergeladen von Datapark.
Achtung, fertig, indiziere!
Mittels indexer -a kann nun ein kompletter Indizierungslauf gestartet werden. Ohne -a arbeitet der Indexer nur die neuen Dateien durch. Dies bietet sich an für einen Cronjob. search.cgi im cgi-bin Verzeichnis sucht nun in diesem Index… Aufrufen und freuen.
Bugs..?
Manchmal wird als Dateiname beziehungsweise Titel eines Fundes irgendwas wie /tmp/ind.1.blah angegeben… No Clue was das soll… Noch noer Clue was ich dagegen tun kann 🙁 …
Wenn mnogosearch ein Dokument (doc/xls/ppt/pdf) indiziert. wird das dokument ins /tmp verzeichnis kopiert/heruntergeladen und dort vom parser in text umgewandelt. danach wird es indiziert.
/tmp/ind.1.blah ist der temporäre filename. dieser sollte aber nicht indiziert werden.
Du erwähnst unter anderem Lucene. Läuft das bei Cyon?
Nein, ich denke nicht dass das „ur-Lucene“ (Apache) bei Cyon läuft, zumindest nicht bei meinem „Cherry“.
Ausser, Du nimmst die PHP-Implementation.