Dokument Management in Markdown

Wie viele Entwickler dokumentiere ich meine Arbeit in Markdown formatierten Textdateien. Pro Projekt sammelt sich Wissen an, welches nur im Projektordner wiederzufinden ist. Dazu kommt ein Wissensarchiv in einem Dropbox Ordner welches Notizen und auch Markdown Versionen von Websiten oder Ebooks enthält.

Zur Anzeige von Projektbasierten Dokumentationen, speziell für Kunden, verwende ich MDwiki. Das ist eine einzige HTML Datei, welche alle Markdown Dateien clientseitig via Javascript rendert (Benötigt ein händisch erstelltes Menü zur Navigation).

Per Projekt durchsuche ich die Dokumentationen einfach über die Suchfunktion in Sublime Text.

Was aber wenn ich über Projekte hinaus in meinen Markdown Dateien suchen will?

Mein erster Ansatz war die Windows interne Suchfunktion welche Dokumentinhalte indizieren kann. Leider ist das einrichten und ausschließen von Ordnern müßig und ungenau. grepWin durchsucht Dokumente in Echtzeit, ist aber ebenso aufwändig einzurichten, um Ordner und Dateisuchmuster ein- oder auszuschließen. Das gleiche gilt für eine kommerzielle Software wie FileLocator Pro - die zwar komfortabler ist und Einstellungen gespeichert werden können, aber nicht wirklich einer Textsuche gerecht wird.

Mein Traum-Setting ist also eine Textsuche über einen Index, welcher aus Markdown Dateien erzeugt wird, die über meine Festplatte verstreut liegen. Ein wichtiger Punkt ist hierbei die granulare Einstellung welche Dateien, wo indiziert werden.

Ich möchte alle eigenen Markdown Dateien in Projektordnern indizieren, aber nicht die unzähligen readme.md, changelog.md oder license.md Dateien, die sich in Ordnern wie /vendor/ oder /node_modules/ befinden, also in Softwarepaketen von Dritten.

Die Lösung: Recoll auf Basis der Opensource Volltextsuchmachine Xapian

Xapian ist eine Volltextsuchmachine, wie Solr oder Sphinx. Dokumente bzw. Text wird in Einzelteile zerlegt, gewichtet und man erhält relevante Ergebnisse zu Suchworten auch abhängig vom Wortstamm. Die Suche nach Hose gibt also auch die Mehrzahl Hosen zurück. Normalerweise findet man solche Suchmaschinen auf Webservern, um umfangreiche Webseiten zu indizieren.

Vor Jahren gab es mal die Desktop Search von Google, welche die gesamte Festplatte indiziert hat und ein Google-ähnliches Suchen und Finden ermöglicht hat.

Die Software Recoll führt dieses Konzept weiter.

Recoll Interface

Recoll stellt ein Interface zum Konfigurieren, Erstellen und Suchen über einen Xapian Index bereit.

Ursprünglich für Linux entwickelt, gibt es glücklicherweise einen Windows Port (Recoll on Windows). Hat mal Python 2.7 schon installiert, geht der Start eigentlich sehr schnell.

Recoll kann von Haus auf reinem Text basierende Formate wie TXT, HTML oder auch Mailboxen von Thunderbird indizieren. Mit Zusatzprogrammen, die mitgeliefert werden, ist auch das indizieren von PDF, Word Dokumenten, Meta Daten von Media Dateien wie MP3 oder JPG (ID3 oder Exif) kein Problem. Selbst Archive und damit auch eBooks im ePub Format werden ausgelesen.

Das Konfigurieren von Recoll passiert hauptsächlich über eine grafische Oberfläche. Für meinen Fall, Markdown Dateien zu indizieren musste ich jedoch eine Konfigurationsdatei ändern.

In der Datei mimemap muss die Dateiendung *.md dem Mime-type text/plain zugeordnet werden, damit Recoll diese Dateien indiziert und als Textdateien auslesen kann.

mimemap befindet sich in einem Programmverzeichnis im Windows Nutzerordner C:\Users\WindowsNutzername\AppData\Local\Recoll.

# The system-wide configuration files for recoll are located in:
#   C:/Program Files (x86)/Recoll/Share/examples
# The default configuration files are commented, you should take a look
# at them for an explanation of what can be set (you could also take a look
# at the manual instead).
# Values set in this file will override the system-wide values for the file
# with the same name in the central directory. The syntax for setting
# values is identical.

.md = text/plain

Mehr Informationen dazu findet sich in der Dokumentation.

Zurück zur grafischen Oberfläche, hier kann man Globale Einstellungen vornehmen z.B. welche Ordner indiziert werden, welche Dokumenttypen (Mime-Types), welche Datei ausgeschlossen werden, die Sprachen und weitere Details.

In meinem Fall möchte ich alle Textdateien indiziert wissen, jedoch nicht solche mit einer .txt Endung, sondern nur .md Dateien, welche wir auf den text/plain Mime-Type gemappt haben. Weiterhin sollen PDF Dateien und E-Books indiziert werden.

Recoll Global

In den Lokalen Parametern kann noch einmal explizit angegeben werden, dass in einem bestimmten Ordner dann doch keine PDF Dateien indiziert werden sollen.

Recoll Global

Es kommen sicher noch einige Ausschlusskriterien hinzu, um den Index schlank zu halten, aber das war es im Großen und Ganzen.

Ein Suchindex über alle meine Markdown Dateien und als Bonus noch PDF und eBook Formate.