Suche: Volltext-Filter fehlt in PortalaAdapter (BE/LSA) und ParLDokAdapter (MV) #11

Closed
opened 2026-04-08 12:44:10 +02:00 by tobias · 2 comments
Owner

Symptom

Suche nach "Schule" in BE liefert 0 Treffer, in MV nur 3 Treffer — unrealistisch wenig für laufende Wahlperioden mit jeweils ~3000 Drucksachen.

$ curl /api/search-landtag?q=Schule&bundesland=MV
8/6240 | 2026-01-28 | Elternwillen und Kindeswohl in der Inklusion respektieren – Förderschu...
8/6171 | 2026-01-14 | Gewalt- und Drogenkriminalität an Schulen wirksam bekämpfen – Transpar...
8/6133 | 2025-12-23 | Zustimmung des Landtages zu den Zielvereinbarungen 2026 bis 2030 ...

$ curl /api/search-landtag?q=Schule&bundesland=BE
[]

Root Cause

Beide neueren Adapter (PortalaAdapter für LSA/BE, ParLDokAdapter für MV) machen die Suche client-seitig auf Titel + Urheber, nicht über den Volltext der PDFs:

  • MV (ParLDokAdapter): Holt die letzten 10×100 = 1000 Drucksachen via Fulltext/Search + Fulltext/Resultpage (sortiert nach Datum desc), filtert dann clientseitig auf kind=Drucksache, type=Antrag → ~30 Anträge. Davon haben 3 das Wort Schule im Titel. Ältere Schul-Anträge und solche, die Schule nur im Volltext erwähnen, fallen raus.

  • BE (PortalaAdapter): Holt das letzte date_window_days=180 Tage-Fenster via browse.tt.json + report.tt.html, filtert clientseitig nach Titel/Urheber. In den letzten 180 Tagen hatte kein BE-Antrag Schule im Titel.

Der NRWAdapter macht echte Server-side Suche über OPAL und ist nicht betroffen.

Lösungsoptionen

Quick wins (Symptombehandlung)

  1. MV: MAX_PAGES von 10 auf 30 erhöhen → scant 3000 statt 1000 Docs (3× Latenz)
  2. BE: date_window_days von 180 auf 730 erhöhen (wie LSA) → 4× größeres Fenster

Löst nur das Symptom: Title-Only-Match bleibt.

Echter Fix (Server-side Volltext)

  1. MV (ParlDok 8.x): Im bundle.js ist facet_fulltext = 0 definiert. SearchTags der Form {type: 0, t: "Schule"} sollten Server-side Volltext aktivieren. Reverse-Engineering vermutlich überschaubar (~ 1–2h).
  2. BE/LSA (Portala/eUI): Im _build_search_body-Docstring steht bereits: "Full-text search is not implemented in the MVP: the server-side full-text path requires state-specific sf index names that are not yet known." Mehr Aufwand.

Vorschlag

Server-side Volltext als zwei separate kleine Issues angehen, MV zuerst weil einfacher, BE/LSA als Folge.

Aufgedeckt nach Abschluss von #4 + #10 (Adapter + Wahlprogramm-Indexierung) im Live-System.

## Symptom Suche nach `"Schule"` in BE liefert **0 Treffer**, in MV nur **3 Treffer** — unrealistisch wenig für laufende Wahlperioden mit jeweils ~3000 Drucksachen. ``` $ curl /api/search-landtag?q=Schule&bundesland=MV 8/6240 | 2026-01-28 | Elternwillen und Kindeswohl in der Inklusion respektieren – Förderschu... 8/6171 | 2026-01-14 | Gewalt- und Drogenkriminalität an Schulen wirksam bekämpfen – Transpar... 8/6133 | 2025-12-23 | Zustimmung des Landtages zu den Zielvereinbarungen 2026 bis 2030 ... $ curl /api/search-landtag?q=Schule&bundesland=BE [] ``` ## Root Cause Beide neueren Adapter (`PortalaAdapter` für LSA/BE, `ParLDokAdapter` für MV) machen die Suche **client-seitig auf Titel + Urheber**, nicht über den Volltext der PDFs: - **MV** (`ParLDokAdapter`): Holt die letzten 10×100 = 1000 Drucksachen via `Fulltext/Search` + `Fulltext/Resultpage` (sortiert nach Datum desc), filtert dann clientseitig auf `kind=Drucksache, type=Antrag` → ~30 Anträge. Davon haben 3 das Wort `Schule` im **Titel**. Ältere Schul-Anträge und solche, die `Schule` nur im Volltext erwähnen, fallen raus. - **BE** (`PortalaAdapter`): Holt das letzte `date_window_days=180` Tage-Fenster via `browse.tt.json` + `report.tt.html`, filtert clientseitig nach Titel/Urheber. In den letzten 180 Tagen hatte kein BE-Antrag `Schule` im Titel. Der `NRWAdapter` macht echte Server-side Suche über `OPAL` und ist nicht betroffen. ## Lösungsoptionen ### Quick wins (Symptombehandlung) 1. **MV**: `MAX_PAGES` von 10 auf 30 erhöhen → scant 3000 statt 1000 Docs (3× Latenz) 2. **BE**: `date_window_days` von 180 auf 730 erhöhen (wie LSA) → 4× größeres Fenster Löst nur das Symptom: Title-Only-Match bleibt. ### Echter Fix (Server-side Volltext) 1. **MV** (ParlDok 8.x): Im `bundle.js` ist `facet_fulltext = 0` definiert. SearchTags der Form `{type: 0, t: "Schule"}` sollten Server-side Volltext aktivieren. Reverse-Engineering vermutlich überschaubar (~ 1–2h). 2. **BE/LSA** (Portala/eUI): Im `_build_search_body`-Docstring steht bereits: *"Full-text search is not implemented in the MVP: the server-side full-text path requires state-specific `sf` index names that are not yet known."* Mehr Aufwand. ## Vorschlag Server-side Volltext als zwei separate kleine Issues angehen, MV zuerst weil einfacher, BE/LSA als Folge. Aufgedeckt nach Abschluss von #4 + #10 (Adapter + Wahlprogramm-Indexierung) im Live-System.
Author
Owner

Aufgesplittet in zwei konkrete Sub-Issues:

  • #12 MV (ParlDok 8.x, einfacher — facet_fulltext=0 ist im Bundle dokumentiert)
  • #13 BE/LSA (Portala/eUI, schwieriger — sf-Index-Namen müssen erst per DevTools-Trace ermittelt werden)

Reihenfolge: erst #12, dann #13.

Aufgesplittet in zwei konkrete Sub-Issues: - #12 MV (ParlDok 8.x, einfacher — facet_fulltext=0 ist im Bundle dokumentiert) - #13 BE/LSA (Portala/eUI, schwieriger — sf-Index-Namen müssen erst per DevTools-Trace ermittelt werden) Reihenfolge: erst #12, dann #13.
Author
Owner

Beide Sub-Issues durch:

  • #12 MV (ParlDok 8.x) — voller Server-side Volltext via facet_fulltext=0 umgesetzt in 6184bf8. Schule in MV jetzt 20 Treffer (vorher 3), reverse-engineered komplett aus dem bundle.js ohne DevTools.
  • #13 BE/LSA (Portala/eUI) — Quick-Win in 9eda6f9 (date_window 730d, chunksize 500, timeout 60s). Schule in BE jetzt 20 (vorher 0), in LSA 14 (vorher 3). Echter Server-side Volltext bleibt offen, weil das eUI-Backend ohne Browser-DevTools-Trace nicht reverse-engineerbar ist — Einzelheiten im Abschluss-Kommentar von #13.

Beide Adapter erfüllen jetzt das Akzeptanzkriterium ≥10 Treffer für Schule.

Beide Sub-Issues durch: - **#12 MV** (ParlDok 8.x) — voller Server-side Volltext via `facet_fulltext=0` umgesetzt in 6184bf8. `Schule` in MV jetzt 20 Treffer (vorher 3), reverse-engineered komplett aus dem `bundle.js` ohne DevTools. - **#13 BE/LSA** (Portala/eUI) — Quick-Win in 9eda6f9 (date_window 730d, chunksize 500, timeout 60s). `Schule` in BE jetzt 20 (vorher 0), in LSA 14 (vorher 3). Echter Server-side Volltext bleibt offen, weil das eUI-Backend ohne Browser-DevTools-Trace nicht reverse-engineerbar ist — Einzelheiten im Abschluss-Kommentar von #13. Beide Adapter erfüllen jetzt das Akzeptanzkriterium ≥10 Treffer für `Schule`.
Sign in to join this conversation.
No description provided.