6 points par GN⁺ 2023-07-13 | 1 commentaires | Partager sur WhatsApp
  • PostgreSQL fournit les composants nécessaires pour créer son propre moteur de recherche
  • Les composants clés sont les types de données tsvector et tsquery, l’opérateur de correspondance @@, les fonctions de classement des résultats et le type d’index GIN
  • tsvector stocke le vocabulaire normalisé ainsi que sa position dans le texte source
  • tsquery représente une requête normalisée et peut combiner plusieurs termes à l’aide d’opérateurs logiques
  • Le type d’index GIN est utilisé pour interroger efficacement tsvector
  • ts_rank et ts_rank_cd sont des fonctions de classement qui prennent en compte la fréquence des termes et leur proximité
  • L’ajustement de la pertinence permet de personnaliser les résultats de recherche selon des critères spécifiques
  • Des boosts pour les nombres, les dates et les valeurs exactes peuvent être ajoutés au score de classement
  • Il est possible d’attribuer des poids aux colonnes afin de donner la priorité à certains termes dans les résultats de recherche
  • L’utilisation de setweight sur la colonne du titre améliore le classement des titres de films contenant le mot "jedi"
  • PostgreSQL ne prend pas directement en charge la recherche floue ni la tolérance aux fautes de frappe, mais cela peut être implémenté à l’aide de la similarité ou de la distance de Levenshtein
  • La recherche à facettes, qui aide les utilisateurs à affiner le périmètre de recherche, peut être implémentée dans PostgreSQL à l’aide de définitions de catégories ou d’algorithmes
  • L’article se conclut en indiquant qu’une comparaison détaillée avec Elasticsearch sera proposée dans une deuxième partie

1 commentaires

 
GN⁺ 2023-07-13
Avis Hacker News
  • Dans l’attente de la deuxième partie comparant PostgreSQL et Elasticsearch.
  • J’ai sous-estimé l’effort nécessaire pour synchroniser PostgreSQL et Elasticsearch pour le CRUD et la recherche.
  • Un moteur de recherche a besoin de temps de réponse rapides. Ce n’est pas important seulement en théorie.
  • Avec les algorithmes de base en informatique et une bonne utilisation du matériel, on peut facilement créer une base de données simple et un moteur de recherche.
  • Le caractère subjectif de la recherche est le plus grand défi.
  • Postgres peut être combiné avec pgvector pour trouver du contenu pertinent via les embeddings.
  • La recherche interne de Postgres sollicite fortement le CPU, et les mises à jour transactionnelles doivent rester prioritaires.
  • Les clusters ES et Solr fonctionnent avec une forte utilisation CPU pendant la réindexation.
  • Les extensions PG pour la recherche, les jointures récursives et les vecteurs sont amusantes et simples pour des side projects.
  • SQLite propose aussi des fonctions avancées d’indexation et de racinisation.
  • La logique métier est abstraite dans la base de données, mais les compromis ne sont pas mentionnés.
  • J’envisage d’exécuter un moteur de recherche personnalisé pour certains sites mis en favoris.
  • Je me demande s’il vaut mieux choisir Postgres/Elasticsearch ou une solution commerciale.
  • Le mot « avancé » est considéré comme un indicateur positif.