Zwei Luecken, die im Issue zusammen stehen. **Im Aufgabendashboard fehlte ein Suchfeld.** Es gab Filter nach Status und Projekt, aber keine Moeglichkeit, nach einem Wort zu suchen. Das Suchfeld deckt Titel, Beschreibung, Labels und Projektname ab. Gefiltert wird im Browser - die Aufgaben liegen dort ohnehin alle vor, es braucht also keine zusaetzliche Abfrage und es gibt keine Verzoegerung beim Tippen. Wer sucht, sucht dabei auch in Erledigtem: sonst faende man die Aufgabe von letzter Woche nicht wieder, obwohl man genau sie meint. Der Schalter "Erledigte einblenden" gilt nur ohne Suchbegriff. **Die Volltextsuche kannte nur Notizen.** Task ist jetzt ebenfalls dabei, nach demselben Muster: deutsche Textsuche, ts_headline fuer den Ausschnitt, Hervorhebung als [[…]] statt als HTML. Deutsche Stammformen greifen damit auch hier - "Rechnung" findet "Rechnungen". Dazu ein Ausdrucksindex Task_fulltext_idx wie Note_fulltext_idx. Der Ausdruck muss Zeichen fuer Zeichen dem in der Abfrage entsprechen, sonst greift er nicht; nachgeprueft mit EXPLAIN, der Plan zeigt einen Bitmap Index Scan darauf. "prisma migrate diff" laesst ihn in Ruhe - Gegenprobe kommt leer heraus. Das Antwortfeld heisst weiterhin "hits" und meint die Notizen. Umbenennen haette nur Aufrufer gebrochen, ohne etwas zu verbessern; Aufgaben kommen als eigenes Feld dazu. Beide Stellen, die Treffer anzeigen - Projektbrett und Schnellsuche -, zeigen sie jetzt. Geprueft: 261 Unit-Tests, 36 E2E-Tests. Die Volltextsuche zusaetzlich gegen die laufende Anwendung: Treffer in Titel und Beschreibung, Erledigtes inbegriffen, Stammformen greifen, fremde Konten finden nichts. Refs #4
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
-- Volltextsuche ueber Aufgaben.
|
||||
--
|
||||
-- Wie Note_fulltext_idx ein Ausdrucksindex: Prisma kann so etwas im Schema
|
||||
-- nicht abbilden und kennt ihn deshalb nicht. Nachgeprueft mit
|
||||
-- "prisma migrate diff" gegen das Schema - es kommt "empty migration"
|
||||
-- heraus, der Index wird also weder angelegt noch geloescht. Trotzdem beim
|
||||
-- Erzeugen kuenftiger Migrationen kurz hinsehen.
|
||||
--
|
||||
-- Faellt er doch einmal weg, funktioniert die Suche weiter, nur langsamer:
|
||||
-- Postgres berechnet to_tsvector dann je Zeile.
|
||||
--
|
||||
-- Der Ausdruck muss Zeichen fuer Zeichen dem in src/app/api/search/route.ts
|
||||
-- entsprechen, sonst greift der Index nicht. Die zweistellige Form von
|
||||
-- to_tsvector mit fester Konfiguration ist IMMUTABLE und damit indizierbar.
|
||||
--
|
||||
-- Anders als bei der Notiz ist auch die Beschreibung optional, deshalb steht
|
||||
-- coalesce um beide Spalten.
|
||||
|
||||
CREATE INDEX "Task_fulltext_idx" ON "Task"
|
||||
USING GIN (to_tsvector('german', coalesce("title", '') || ' ' || coalesce("description", '')));
|
||||
Reference in New Issue
Block a user