CI / pruefen (pull_request) Canceled after 0s
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
21 lines
983 B
SQL
21 lines
983 B
SQL
-- 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", '')));
|