6 Punkte von GN⁺ 2023-07-13 | 1 Kommentare | Auf WhatsApp teilen
  • PostgreSQL bietet Bausteine, um eine eigene Suchmaschine zu erstellen
  • Zu den wichtigsten Komponenten gehören die Datentypen tsvector und tsquery, der Match-Operator @@, Funktionen zur Bewertung von Trefferergebnissen sowie der Indextyp GIN
  • tsvector speichert normalisierte Begriffe und ihre Positionen im Originaltext
  • tsquery stellt eine normalisierte Abfrage dar und kann mehrere Begriffe mit logischen Operatoren kombinieren
  • Der Indextyp GIN wird für effiziente Abfragen von tsvector verwendet
  • ts_rank und ts_rank_cd sind Ranking-Funktionen, die Termhäufigkeit und Nähe berücksichtigen
  • Durch Relevanzanpassung lassen sich Suchergebnisse nach bestimmten Kriterien anpassen
  • Dem Ranking-Score können Booster für Zahlen, Datumswerte und exakte Werte hinzugefügt werden
  • Durch das Zuweisen von Spaltengewichten können bestimmte Begriffe in den Suchergebnissen priorisiert werden
  • Die Verwendung von setweight für die Titels palte verbessert das Ranking von Filmtiteln, die das Wort "jedi" enthalten
  • PostgreSQL unterstützt unscharfe Suche oder Tippfehler-Toleranz nicht direkt, kann dies aber mithilfe von Ähnlichkeit oder Levenshtein-Distanz umsetzen
  • Facettensuche, die Nutzern hilft, den Suchbereich einzugrenzen, kann in PostgreSQL mit Kategoriedefinitionen oder Algorithmen implementiert werden
  • Der Artikel schließt mit dem Hinweis, dass in Teil 2 ein detaillierter Vergleich mit Elasticsearch folgt

1 Kommentare

 
GN⁺ 2023-07-13
Hacker-News-Kommentare
  • Ich bin gespannt auf Teil 2 mit dem Vergleich von PostgreSQL und Elasticsearch.
  • Ich habe den Aufwand unterschätzt, PostgreSQL und Elasticsearch für CRUD und Suche zu synchronisieren.
  • Suchmaschinen brauchen schnelle Suchgeschwindigkeiten. Das ist nicht nur in der Theorie wichtig.
  • Mit grundlegenden CS-Algorithmen und dem Einsatz von Hardware lassen sich einfache Datenbanken und Suchmaschinen leicht erstellen.
  • Die subjektive Natur der Suche ist die größte Herausforderung.
  • Postgres kann mit pgvector kombiniert werden, um über Embeddings relevante Inhalte zu finden.
  • Die interne Suche in Postgres ist CPU-lastig, und transaktionale Updates sollten Priorität haben.
  • ES- und Solr-Cluster laufen beim Reindexieren mit hoher CPU-Auslastung.
  • PG-Erweiterungen für Suche, rekursive Joins und Vektoren sind für Side-Projekte unterhaltsam und einfach.
  • Auch SQLite bietet fortgeschrittene Indexierungs- und Stemming-Funktionen.
  • Die Business-Logik wird in die Datenbank abstrahiert, aber die Trade-offs wurden nicht erwähnt.
  • Ich überlege, eine benutzerdefinierte Suchmaschine für bestimmte als Lesezeichen gespeicherte Websites zu betreiben.
  • Ich bin neugierig, ob man Postgres/Elasticsearch oder eine kommerzielle Lösung wählen sollte.
  • Das Wort „fortgeschritten“ wird als positives Signal betrachtet.