# Feature: Volltextsuche und Index-Rebuild Als API-Client möchte ich Dokumente über ihren Inhalt und ihre Metadaten finden und den Suchindex jederzeit neu aufbauen können. ```gherkin Funktionalität: Volltextsuche Szenario: Dokument ist über seinen Inhalt findbar Angenommen ein verarbeitetes Dokument, dessen Text "Stromabrechnung Stadtwerke" enthält Wenn GET /v1/search?q=stadtwerke aufgerufen wird Dann enthält das Ergebnis das Dokument mit id, title, original_name, archive_path und snippet Szenario: Suche berücksichtigt Metadaten Angenommen ein angereichertes Dokument mit dem Tag "versicherung" Wenn GET /v1/search?q=versicherung aufgerufen wird Dann wird das Dokument gefunden, auch wenn der Begriff nicht im Text vorkommt Szenario: Umlaute und Diakritika werden tolerant behandelt Angenommen ein Dokument, dessen Text "Gebührenbescheid" enthält Wenn nach "gebuhrenbescheid" gesucht wird Dann wird das Dokument gefunden Szenario: Treffer sind nach Relevanz sortiert Angenommen mehrere Dokumente enthalten den Suchbegriff unterschiedlich häufig Wenn gesucht wird Dann sind die Treffer nach BM25-Relevanz absteigend sortiert Szenario: OCR-Inhalte sind durchsuchbar Angenommen ein gescanntes Dokument, dessen Text nur per OCR gewonnen wurde Wenn nach einem Begriff aus dem OCR-Text gesucht wird Dann wird das Dokument gefunden Funktionalität: Index-Rebuild über die API Szenario: Rebuild stellt einen konsistenten Index wieder her Angenommen ein inkonsistenter oder leerer FTS-Index bei gefüllter documents-Projektion Wenn POST /v1/admin/search/rebuild aufgerufen wird Dann wird der Index vollständig aus der Projektion neu aufgebaut Und alle zuvor findbaren Dokumente sind wieder findbar Szenario: Rebuild erfordert Authentifizierung Angenommen kein oder ein falscher API-Token Wenn POST /v1/admin/search/rebuild aufgerufen wird Dann antwortet das System mit 401 ``` ## Traceability | Szenario | Go-Test (Pakete `internal/search`, `internal/api`) | |---|---| | Dokument ist über seinen Inhalt findbar | `TestSearch_FindsDocumentByContent` | | Suche berücksichtigt Metadaten | `TestSearch_FindsDocumentByTag` | | Umlaute und Diakritika werden tolerant behandelt | `TestSearch_DiacriticsInsensitive` | | Treffer sind nach Relevanz sortiert | `TestSearch_ResultsOrderedByBM25` | | OCR-Inhalte sind durchsuchbar | `TestSearch_FindsOCRContent` | | Rebuild stellt einen konsistenten Index wieder her | `TestSearchRebuild_RestoresConsistentIndex` | | Rebuild erfordert Authentifizierung | `TestSearchRebuild_RequiresAuth` |