RSS DEV-Gemeinschaft

PostgreSQL Volltextsuche: Rangfolge nach Position

Der Autor beschreibt die Optimierung der Volltextsuche in PostgreSQL für Blog-Beitragstitel. Anfangs wurde `to_tsvector` dynamisch verwendet, was zu Verlangsamungen führte. Um die Leistung zu verbessern, wurde eine Spalte `search_vector` hinzugefügt, die vorverarbeitete tsvectors speichert und mit GIN indiziert wurde. Dies beschleunigte die Suchen mit `to_tsquery` erheblich. Die `ts_rank`-Funktion von PostgreSQL bietet eine Rangfolge der Ergebnisse, aber keine positionsbasierte Rangfolge. Die `POSITION`-Funktion wurde verwendet, um die Position des Suchbegriffs im Titel zu bestimmen. Eine benutzerdefinierte Rangfolge wurde erstellt, indem `ts_rank` und das inverse der Position kombiniert wurden, um eine bessere Relevanzbewertung zu erhalten. Eine kleine Anpassung vermeidet die Division durch Null. Die finale Abfrage ordnet die Ergebnisse nach dieser kombinierten Rangfolge. Die Lösung funktioniert gut für Einzel-Suchbegriffe. Bei der Suche nach mehreren Begriffen ist jedoch eine sorgfältige Überlegung erforderlich, da die `POSITION`-Funktion im Vergleich zu der Flexibilität von `to_tsquery` eingeschränkt ist. Der Autor bietet Links zu relevanten PostgreSQL-Dokumentationen an.
favicon
dev.to
PostgreSQL Full Text Search Rank by Position