Die Suche im Board arbeitet auf den bereits geladenen Projekten und deckt Name, Kurzbeschreibung, Tags und Repo-Pfad ab. Notizen liegen dort nicht vor - sie mitzuladen wuerde die Seite unnoetig aufblaehen. Deshalb ein eigener Endpunkt, der Postgres mit seiner deutschen Textsuche arbeiten laesst. - websearch_to_tsquery versteht Eingaben wie "docker -compose" und wirft bei Unsinn keinen Fehler - ts_headline liefert den Ausschnitt gleich mit; die Hervorhebung kommt als [[…]] zurueck, damit die Oberflaeche kein HTML aus der Datenbank einbetten muss - deutsche Stammformen greifen: "Webhook" findet auch "Webhooks" - entprellt ab zwei Zeichen, laufende Abfragen werden abgebrochen Dazu ein GIN-Index auf dem Suchausdruck. Prisma kann Ausdrucksindizes im Schema nicht abbilden - nachgeprueft: "migrate diff" laesst ihn in Ruhe und schlaegt kein DROP vor. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
17 lines
808 B
SQL
17 lines
808 B
SQL
-- Volltextsuche ueber Notizen.
|
|
--
|
|
-- Dies ist ein Ausdrucksindex. Prisma kann so etwas im Schema nicht abbilden
|
|
-- und kennt ihn deshalb nicht. Nachgeprueft: "prisma migrate diff" laesst ihn
|
|
-- in Ruhe und schlaegt kein DROP vor - Ausdrucksindizes werden schlicht
|
|
-- ignoriert. 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 mit dem in src/app/api/search/route.ts uebereinstimmen,
|
|
-- sonst greift der Index nicht. Die zweistellige Form von to_tsvector mit
|
|
-- fester Konfiguration ist IMMUTABLE und damit indizierbar.
|
|
|
|
CREATE INDEX "Note_fulltext_idx" ON "Note"
|
|
USING GIN (to_tsvector('german', coalesce("title", '') || ' ' || "content"));
|