Volltextsuche in Postgres: Elasticsearch ist in den meisten Fällen überflüssig

Die meisten Teams greifen zu Elasticsearch, sobald ein Product Manager das Wort "Suche" in den Mund nimmt. Das ist meistens die falsche Entscheidung. Elasticsearch ist im Betrieb teuer, erhöht die Komplexität beim Deployment und erfordert, die Daten ständig mit dem primären Datenspeicher synchron zu halten. Postgres verfügt seit über einem Jahrzehnt über eine leistungsfähige Volltextsuche — für die meisten Anwendungen ist das mehr als ausreichend.

Die zentralen Bausteine sind tsvector und tsquery. Ein tsvector ist eine sortierte Liste normalisierter Lexeme (auf ihren Wortstamm reduzierte Tokens), die aus einem Text extrahiert werden. Ein tsquery ist ein Suchausdruck — Begriffe mit booleschen Operatoren und optionalen Gewichtungen.