Marco Burmeister

  private Homepage



Linux - Suchmaschine - Recoll - Indizierung von verschiedenen Formaten unter Linux (Word, Excel, LibreOffice, Excel, Word, LibreOffice, doc, docx, odt, ods, txt, pdf, rtf, xls, xlsx)

Wenn viele Dateien mit verschiedenen Formaten (Excel, Word, LibreOffice, doc, docx, odt, ods, txt, pdf, rtf, xls, xlsx) in einem Mount-Point bzw. Verzeichnis auf einem Linux System (hier openSUSE) liegen, kann es den Bedarf geben, diese vielen Dateien auch durchsuchen zu können.
In dem hier genannten Beispiel liegen die Dateien dann in einer Ordner-Struktur.

Ich wollte hierfür eine lokale Suchmöglichkeit haben, die nicht nur die Dateinamen erfasst, sondern auch in die Dateien schaut und diese indiziert.

Bei der Suche bin ich auf das Tool mit dem Namen "Recoll" gestoßen.

Am Ende haben wir ein indizertes Verzeichnis, welches mit Kommandozeilen-Tool durchsucht werden können. Als Ausgabe erhalten wir die Filenamen in denen der Suchbegriff gefunden worden ist.

Die Anleitung habe ich nach der Einrichtung geschrieben. Ich hoffe, ich habe nichts vergessen. Sie soll mir helfen, wenn ich das nochmals einrichten muss.

Zu beachten ist noch, dass der erstellte Index so groß werden kann, wie die Original-Daten an Platz verbrauchen. Je nach Situation kann er auch größer sein!

Hinweis:
Für die Richtigkeit der Daten übernehme ich keine Gewähr!

Die Seite ist in die folgenden Bereiche eingeteilt:




top Vorbereitung

In meiner Implementierung nutze ich auf dem Linux-System nur einen OS Benutzer mit dem Namen "ich".
Unter diesem wird Recoll laufen und nur für diesen werden die Dateien indiziert.
Um die Software "Recoll" zu installieren sind bei openSUSE 16 Stand April 2026 entweder die Sourcen zu nutzen oder weitere Repositories hinzuzufügen.

Hier kommen wir auch zu den vorbereitenden Aufgaben und zur Umgebung.

Objekt-ArtObjektAnmerkung
OS BenutzerichBenutzer im OS, der Recoll nutzen wird.
Verzeichnis/SRVgemountetes Linux Filesystem mit den verschiedenen Dateien in einer Ordner-Struktur
Verzeichnis/SRV/.recollVerzeichnis zur Ablage der Daten von Recoll

Die folgenden Repositories habe ich ergänzt:
zypper ar -fp 74 'https://download.opensuse.org/repositories/KDE:/Qt6/openSUSE_Leap_$releasever' KDE-Qt6
zypper ar -fp 74 'https://download.opensuse.org/repositories/KDE:/Frameworks/openSUSE_Leap_$releasever' KDE-Frameworks
zypper ar -fp 75 'https://download.opensuse.org/repositories/KDE:/Applications/KDE_Frameworks5_openSUSE_Leap_$releasever' KDE-Applications
zypper ar -fp 75 'https://download.opensuse.org/repositories/KDE:/Extra/KDE_Applications_openSUSE_Leap_$releasever' KDE-Extra


Im Anschluss müssen noch die folgenden Software-Pakete installiert werden (wenn alle o.a Dateitypen indiziert werden sollen):

Nach der Installation der Software muss noch unter Python für die Verarbeitung von Word- und Excel-Dokumenten Software mit dem folgenden Befehl installiert werden:
pip3 install python-docx --break-system-packages

Welche Zusatz-Software benötige ich für welchen Dateiendung / Dateitypen ?
DateiendungSoftwareRecoll-Filter
.txtKein Zusatz notwendig– (intern)
.html / .htmKein Zusatz notwendig– (intern)
.rtfunrtfrclrtf.py
.docLibreOffice (soffice)rcldoc.py
.docxpython-docxopenxml-word-body.xsl
.xlsrclxls.py + xls-dump.pyrclxls.py
.xlsxpython-docx / xsltprocpython-docx / xsltproc
.odtLibreOffice (soffice)opendoc-body.xsl
.odsLibreOffice (soffice)opendoc-body.xsl
.pdf (Text)poppler-tools (pdftotext)rclpdf.py
.pdf (Bild)tesseract-ocr / pdftoppmrclpdf.py → rclocr.py


In dem hier genannten Beispiel, wird der Suchindex / die Datenbank von Recoll im gleichen Mount-Point / Verzeichnis abgelegt, in dem auch die Daten liegen. Gegenüber der Standard-Installation, bei dem die Daten-Strukturen von Recoll alle unterhalb von $HOME/[OS-Benutzername] abgelegt werden.

top Einrichtung

Initiale Einrichtung

Nachdem die Vorbereitungen abgeschlossen sind, können wir mit der Einrichtung von Recoll beginnen.

Hier wird es um die Einrichtung der Suchmaschine als auch der reglmäßigen Aktualisierung gehen.

  1. Wir melden uns als normaler OS Benutzer mit dem Namen ich an
  2. Das Verzeichnis /SRV mit den ganzen Dateien ist bereits vorhanden und der OS Benutzer ich hat volle Rechte in dem Verzeichnis
  3. Wir legen uns für Recoll ein Verzeichnis an:
    mkdir /SRV/.recoll
  4. Nun erstellen wir die Haupt-Konfiguration:
    cat > /SRV/.recoll/recoll.conf << 'EOF'
    topdirs = /SRV
    dbdir = /SRV/.recoll/xapiandb

    skippedPaths = /SRV/.recoll /SRV/lost+found
    skippedNames = .* tmp cache Cache Trash Thumbs.db desktop.ini

    followLinks = 1

    indexedmimetypes = \
    text/plain \
    text/html \
    text/rtf \
    application/rtf \
    application/msword \
    application/vnd.openxmlformats-officedocument.wordprocessingml.document \
    application/vnd.ms-excel \
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet \
    application/vnd.oasis.opendocument.text \
    application/vnd.oasis.opendocument.spreadsheet \
    application/vnd.oasis.opendocument.presentation \
    application/vnd.oasis.opendocument.text-template \
    application/vnd.oasis.opendocument.spreadsheet-template \
    application/pdf

    unac_except_trans = ää Ää öö Öö üü Üü ßss

    # OCR als Fallback für Bild-PDFs
    pdfocr = 1
    ocrprogram = rclocr.py
    tesseractlang = deu+eng
    EOF
  5. Nun richten wir mimeconf für die OCR Unterstützung von PDFs ein.
    # Systemkonfiguration als Basis kopieren
    cp /usr/share/Recoll/examples/mimeconf /SRV/.recoll/mimeconf

    # Zeilennummer des PDF-Handlers ermitteln
    grep -n "application/pdf = execm" /SRV/.recoll/mimeconf
    # rclpdf.py nutzt automatisch OCR wenn pdfocr=1 in recoll.conf gesetzt ist
    Weitere Konfigurationsdateien kopieren
    for f in fields mimemap mimeview ptrans; do cp /usr/share/Recoll/examples/$f /SRV/.recoll/ 2>/dev/null done
  6. Externe Indexer (Joplin) sicher deaktivieren
    Hierfür legen wir uns die Datei /SRV/.recoll/backends an.
    cat > /SRV/.recoll/backends << 'EOF'
    # Keine externen Indexer für diese Instanz
    EOF
  7. Einrichtung abgeschlossen


Initialer Indexierungslauf

Nun lassen wir den initialen Index-Lauf starten und lassen die Ausgabe nach /tmp dokumentieren (wichtig ist der fett-markierte Aufruf (nohup recollindex -c /SRV/.recoll -z ) - "-z" leert die Datenbank):

ACHTUNG:
Dieser Lauf kann abhängig von den zu indizierenden Daten auch Stunden bis Tage laufen!

nohup recollindex -c /SRV/.recoll -z > /tmp/recoll-dokumentation.log 2>&1 &
echo "FS_Doku PID: $!"


Indexierungslauf zum Erfassen der Änderungen

Später kann zum Indizieren der nur geänderten Dateien, der folgende Befehl verwendet werden:
recollindex -c /SRV/.recoll


Optional: nur bestimmte Dateitypen neu indexieren

Wenn nur bestimmte Dateitypen neu indiziert werden sollen, kann das wie folgt erfolgen:
recollindex -c /SRV/.recoll -r -p "*.pdf" /SRV


OS Alias zur einfacherer Bedienung

Nun legen wir uns Aliase für die wichtigsten Befehle unter unserem OS Benutzer an.
Damit könnten wir dann mit einem Befehl einen Index-Lauf starten oder die Suche vereinfachen.
In dem Beispiel kann dann mittels resuch [Suchwort] nach dem Suchwort gesucht werden. Als Ausgabe erhalten wir alle Dateinamen, in denen der Suchbegriff gefunden wurde.
cat >> ~/.bashrc << 'EOF'

# Recoll Indexer
alias reindsrv='recollindex -c /SRV/.recoll'

# Recoll Suche
alias resuch='recoll -c /SRV/.recoll -t'
EOF

source ~/.bashrc


SYSTEMD Scipte zur automatischen Aktualisierung des Index

Zum Ende erstellen wir nun noch systemd-Scripte, welche die Suchmaschine automatisch aktuell halten.
  1. Wir bleiben angemeldet als OS Benutzer ich
  2. Wir erstellen uns ein Verzeichnis:
    mkdir -p ~/.config/systemd/user
  3. Nun legen wir uns die Service-Datei an:
    cat > ~/.config/systemd/user/recoll-srv.service << 'EOF'
    [Unit]
    Description=Recoll Indexer
    After=local-fs.target

    [Service]
    ExecStart=/usr/bin/recollindex -c /SRV/.recoll
    KillSignal=SIGTERM
    TimeoutStopSec=30
    EOF
  4. Wir benötigen noch eine Timer-Datei:
    cat > ~/.config/systemd/user/recoll-srv.timer << 'EOF'
    [Unit]
    Description=Recoll SRV – täglich oder nach Boot

    [Timer]
    OnCalendar=*-*-* 01:00:00
    Persistent=true
    OnBootSec=5min

    [Install]
    WantedBy=timers.target
    EOF
  5. Jetzt aktivieren wir unseren Service:
    systemctl --user daemon-reload
    systemctl --user enable --now recoll-srv.timer

    # Status prüfen
    systemctl --user list-timers --all | grep Recoll
  6. Lingering aktivieren, damit der OS Benutzer ich nicht imemr angemeldet sein muss:
    loginctl show-user $USER | grep Linger

    # Aktivieren
    sudo loginctl enable-linger $USER




Zusammenfassung

Ergebnis:
Nun haben wir alles abgeschlossen. Die Suchmaschine hat die Daten indiziert und an ihrem Platz gelassen und nicht verändert.
Die Daten werden automatisch aktuell gehalten.
Wir können mittels Kommando-Zeilen Befehl die Suchmaschine abfragen.


top Links zum Thema


Hinweis:
Für die Richtigkeit der Daten übernehme ich keine Gewähr!
Für den Inhalt von Internet-Seiten, auf die von dieser Seite verwiesen wird, übernehme ich keine Verantwortung!