Zum Inhalt

Volltext Suche (FTS)

Neue Volltextsuche-Engine

Mit dem Januar 2025 Update wurde Solr durch Flatcurve ersetzt. Alle bestehenden FTS-Indizes sind daher obsolet und können entfernt werden.

mailcow verweist auf das alte solr-vol-1 und fragt bei jedem Update-Vorgang, ob es entfernt werden soll, falls es noch existiert.

Flatcurve ist die neue Volltextsuche, die auch auf leistungsschwächeren Systemen besser funktioniert und langfristig auch zum Standard von Dovecot selbst wird.

Anders als bei Solr ist für Flatcurve kein weiteres Docker-Volume notwendig. Flatcurve speichert seine FTS-Datenbanken im vmail-index-Volume und erzeugt eine ähnliche Ordnerstruktur wie:

/var/vmail_index/tester@develcow.de/.INBOX/
├── dovecot.index
├── dovecot.index.cache
├── dovecot.index.log
└── fts-flatcurve
    └── index.814
        ├── flintlock
        ├── iamglass
        ├── postlist.glass
        └── termlist.glass

Jeder Unterordner im IMAP-Server erhält entsprechend einen eigenen fts-flatcurve-Ordner mit den jeweiligen Indizes der Mails des Ordners.

Wichtig

Sollten Sie bisher Solr verwendet haben, ist eine komplette Reindexierung erforderlich, da die beiden FTS-Engines nicht miteinander kompatibel sind.

Eine automatische Indexierung des Postfachs wird aktiviert, sobald 20 oder mehr E-Mails eingehen oder eine Volltextsuche durchgeführt wird.

Wir empfehlen, eine manuelle Reindexierung nur unter Aufsicht durchzuführen, da trotz niedriger Systemanforderungen eine übermäßige Systemauslastung nicht ausgeschlossen werden kann.

Weiter unten erfahren Sie, wie Sie eine Reindexierung anstoßen können.

FTS-bezogene Dovecot-Befehle

FTS-Datenbank auf Fehler überprüfen und ggf. reparieren

# Einzelbenutzer
docker compose exec dovecot-mailcow doveadm fts rescan -u user@domain
# Alle Benutzer
docker compose exec dovecot-mailcow doveadm fts rescan -A
# Einzelbenutzer
docker-compose exec dovecot-mailcow doveadm fts rescan -u user@domain
# Alle Benutzer
docker-compose exec dovecot-mailcow doveadm fts rescan -A

Dovecot-Wiki: "Scannt, welche Mails im Volltextsuchindex vorhanden sind, und vergleicht diese mit den tatsächlich in den Postfächern vorhandenen Mails. Dies entfernt Mails aus dem Index, die bereits gelöscht wurden, und stellt sicher, dass der nächste doveadm-Index alle fehlenden Mails (falls vorhanden) indiziert."

Dies indiziert nicht eine Mailbox neu, sondern repariert lediglich einen vorhandenen Index.

FTS-Datenbank neu indizieren (Reindex)

Wenn Sie die Daten sofort neu indizieren möchten, können Sie den folgenden Befehl ausführen, wobei * auch eine Postfachmaske wie 'Sent' sein kann. Diese Befehle sind optional, können jedoch den Prozess beschleunigen:

# Einzelner Benutzer
docker compose exec dovecot-mailcow doveadm index -u user@domain '*'
# Alle Benutzer, langsamer und risikoreicher
docker compose exec dovecot-mailcow doveadm index -A '*'
# Einzelner Benutzer
docker-compose exec dovecot-mailcow doveadm index -u user@domain '*'
# Alle Benutzer, langsamer und risikoreicher
docker-compose exec dovecot-mailcow doveadm index -A '*'

Hinweis

Die Indizierung wird einige Zeit in Anspruch nehmen.

Es besteht die Möglichkeit einer übermäßigen Systemauslastung, bis hin zu Systemabstürzen in seltenen Fällen. Beobachten Sie daher den Indizierungsprozess und Ihre Systemauslastung aufmerksam!

Da die Neuindizierung ressourcenintensiv sein kann, wurde sie nicht in die mailcow-UI integriert.

Fehler beim Re-Indizieren müssen manuell über die CLI behoben werden.

FTS-Datenbank löschen

mailcow entfernt die Indexdaten eines Benutzers automatisch, wenn das entsprechende Postfach gelöscht wird.

Alternativ können Sie den Index für Flatcurve manuell über die CLI entfernen:

# Einzelner Benutzer
docker compose exec dovecot-mailcow doveadm fts-flatcurve remove -u user@domain '*'
# Alle Benutzer
docker compose exec dovecot-mailcow doveadm fts-flatcurve remove -A '*'
# Einzelner Benutzer
docker-compose exec dovecot-mailcow doveadm fts-flatcurve remove -u user@domain '*'
# Alle Benutzer
docker-compose exec dovecot-mailcow doveadm fts-flatcurve remove -A '*'

FTS-spezifische Optionen in mailcow.conf

mailcow liefert standardmäßig niedrige Parameter für die neue FTS-Engine, um sie auch auf schwächeren Systemen nutzbar zu machen.

Für leistungsstärkere Systeme können Sie einige Parameter anpassen, um eine effizientere Indexierung zu ermöglichen.

SKIP_FTS (Volltextsuche deaktivieren)

In der mailcow.conf können Sie die Volltextsuche komplett deaktivieren. Dies ist vor allem auf Low-End-Systemen zu empfehlen, welche Probleme haben mailcow sowie die Indexierung flüssig laufen zu lassen.

Flatcurve ist ressourcenschonender als Solr, benötigt jedoch mehr Speicherplatz und gegebenenfalls mehr CPU-Leistung (abhängig vom Setup).

mailcow-Standard

Standardmäßig ist dieser Parameter auf n gesetzt, wodurch die Volltextsuche aktiviert ist.

Best Practice

Lassen Sie die Indexierung zunächst aktiviert. Sollte die neue FTS-Engine zu viele Ressourcen beanspruchen, können Sie die Einstellung später anpassen.

FTS_PROCS (Anzahl der Indexierungsprozesse)

Mit der Variablen FTS_PROCS in der mailcow.conf können Sie die Anzahl der Indexierungsprozesse anpassen, die gleichzeitig arbeiten.

mailcow-Standard

Standardmäßig ist dieser Wert auf 1 Thread limitiert.

ACHTUNG

Die Indexierungsprozesse verwenden jeweils einen CPU-Thread vollständig. Systeme mit wenigen Kernen sollten eine niedrige Anzahl einstellen, um die restliche Systemleistung nicht zu beeinträchtigen.

Best Practice

Planen Sie etwa die Hälfte der CPU-Threads Ihres Systems für die Indexierungsprozesse ein. Bei ungerader Kernzahl verwenden Sie die niedrigere Anzahl an Threads, um genügend Ressourcen für das Hauptsystem zu lassen.

Dual-Core- oder Single-Core-Systeme sollten die Volltextsuche deaktivieren.

FTS_HEAP (Max. Arbeitsspeicher pro Indexierungsprozess)

Mit FTS_HEAP in der mailcow.conf legen Sie den Arbeitsspeicher pro Indexierungsprozess fest.

mailcow-Standard

Standardmäßig ist dieser Wert auf 128 MB pro Prozess limitiert.

Best Practice

Weisen Sie jedem Prozess idealerweise 512 MB Arbeitsspeicher zu. Systeme mit weniger als 8 GB RAM sollten bei 128 MB bleiben oder höchstens auf 256 MB erhöhen.

Bei ausgeschöpftem RAM kann Dovecot zwar weiterarbeiten, wird jedoch langsamer.

Erweiterte Konfigurationsmöglichkeiten

Die Integration von Flatcurve erlaubt es, FTS-Optionen individuell anzupassen.

Hinweis

Jedes Setup ist anders, daher gibt es kein allgemeingültiges Optimum.

Die Erfahrung mit der Engine variiert je nach System.

Beispielsweise können Sie eine detailliertere Volltextsuche (Substring Search) aktivieren, die genauere Ergebnisse liefert, aber auch mehr Speicherplatz und Zeit erfordert.

Substring Search aktivieren (Detailiertere Volltextsuche)

Bearbeiten Sie die Datei data/conf/dovecot/conf.d/fts.conf:

plugin {
    [...]

    fts_flatcurve_substring_search=yes # Kann entweder yes oder no sein
}

Ein Neustart von Dovecot aktiviert die Änderungen:

docker compose restart dovecot-mailcow
docker-compose restart dovecot-mailcow

Weitere Tweaks

Wir nehmen gerne von der Community vorgeschlagene Tweaks auf.

In der Zwischenzeit können Sie sich die offiziellen Dokumentationen zu Dovecot und Flatcurve ansehen: