← Zurück zum Blog
WagtailPostgreSQL4. Mai 2026· 12 min Lesezeit

Wagtail-Suche verbessern: PostgreSQL Full-Text & Elasticsearch

Inhalt
  1. Die Search-Backends im Überblick
  2. PostgreSQL Full-Text einrichten
  3. Suchfelder & Boosting definieren
  4. Autocomplete
  5. Wann Elasticsearch?
  6. Fazit

"Die Suche findet nichts Vernünftiges" — ein häufiger Grund, warum ich zu bestehenden Wagtail-Sites gerufen werde. Meist läuft noch das Datenbank-Backend mit simpler Teilstring-Suche. Hier der Weg zu einer echten Volltextsuche.

Die Search-Backends im Überblick

Meine Faustregel: PostgreSQL Full-Text deckt die allermeisten Wagtail-Sites vollständig ab. Elasticsearch erst, wenn Datenmenge oder Suchansprüche es wirklich verlangen.

PostgreSQL Full-Text einrichten

# settings.py
WAGTAILSEARCH_BACKENDS = {
    "default": {
        "BACKEND": "wagtail.search.backends.database",
        "SEARCH_CONFIG": "german",   # deutsches Stemming!
    }
}

# Bei PostgreSQL nutzt das database-Backend automatisch
# die native Full-Text-Search inkl. Ranking.

Nach der Umstellung den Suchindex neu aufbauen:

python manage.py update_index

Suchfelder & Boosting definieren

Welche Felder durchsucht werden — und wie stark sie gewichtet sind — legst du am Modell fest. Ein Treffer im Titel soll mehr zählen als im Fließtext:

from wagtail.search import index

class BlogPage(Page):
    intro = models.TextField()
    body = StreamField(...)

    search_fields = Page.search_fields + [
        index.SearchField("intro", boost=2),
        index.SearchField("body"),
        index.FilterField("date"),   # zum Filtern, nicht Suchen
    ]
# Suche im Code
from wagtail.models import Page

results = Page.objects.live().search("django performance", operator="and")

# Nur bestimmter Seitentyp
results = BlogPage.objects.live().search(query)

Autocomplete

Für Suchvorschläge während der Eingabe braucht es AutocompleteField:

from wagtail.search import index

class BlogPage(Page):
    search_fields = Page.search_fields + [
        index.AutocompleteField("title"),
        index.SearchField("body"),
    ]

# View
results = BlogPage.objects.live().autocomplete(request.GET.get("q", ""))

Wann Elasticsearch?

Elasticsearch lohnt sich bei sehr großen Inhaltsmengen, facettierter Suche oder wenn du Relevanz sehr fein steuern willst. Die Umstellung ist unkompliziert — nur das Backend und ein laufender Dienst:

pip install "wagtail[elasticsearch]"

WAGTAILSEARCH_BACKENDS = {
    "default": {
        "BACKEND": "wagtail.search.backends.elasticsearch8",
        "URLS": ["http://localhost:9200"],
        "INDEX": "wagtail",
    }
}
# danach: python manage.py update_index

Der Code in den Views bleibt gleich — .search() funktioniert unabhängig vom Backend. Das ist die Stärke von Wagtails Suchabstraktion: Backend wechseln ohne Code-Änderung.

Fazit

Der schnellste Gewinn für fast jede Wagtail-Site: vom Datenbank-Standard auf PostgreSQL Full-Text mit deutschem Stemming und Feld-Boosting wechseln. Das ist wenig Aufwand und hebt die Suchqualität spürbar. Elasticsearch bleibt die Option für die großen Fälle — dank Wagtails Abstraktion ohne Code-Umbau.

Yevhen Chubchyk
Yevhen Chubchyk
Senior Python / Django Entwickler · Freelancer seit 2016 · 20+ Jahre IT-Erfahrung. Wagtail-Projekte für Kunden im DACH-Raum.