M0: arc42-Konzeptdokument, Gherkin-Anforderungen und OpenAPI-Vertrag
- doc/architecture.md: arc42-Detaildokument mit Mermaid-Diagrammen (Bausteinsicht, Klassendiagramm, Statusmodell, 5 Sequenzdiagramme), Speicherkonzept, DEC-01..19-Entscheidungen mit Trade-offs - doc/requirements/: 7 Features als Gherkin-Szenarien (TDD-Grundlage) mit Traceability-Tabellen Szenario <-> Stdlib-Testname - doc/openapi.yaml: API-Vertrag fuer alle 9 Endpunkte (Quelle der Wahrheit) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
# 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` |
|
||||
Reference in New Issue
Block a user