Communauté RSS DEV

Recherche de texte intégral PostgreSQL : classement par position

L'auteur décrit l'optimisation de la recherche de texte intégral dans PostgreSQL pour les titres de billets de blog. Initialement, `to_tsvector` était utilisé de manière dynamique, ce qui provoquait des ralentissements. Pour améliorer les performances, une colonne `search_vector` stockant des tsvectors pré-traités a été ajoutée et indexée à l'aide de GIN. Cela a considérablement accéléré les recherches en utilisant `to_tsquery`. La fonction `ts_rank` de PostgreSQL fournit un classement des résultats, mais manque de classement basé sur la position. La fonction `POSITION` a été utilisée pour déterminer la position du terme de recherche dans le titre. Un classement personnalisé a été créé en combinant `ts_rank` et l'inverse de la position pour un meilleur score de pertinence. Un ajustement mineur évite la division par zéro. La requête finale classe les résultats par ce classement combiné. La solution fonctionne bien pour les recherches à terme unique. Cependant, la recherche de plusieurs termes nécessite une attention particulière en raison des limitations de `POSITION` par rapport à la flexibilité de `to_tsquery`. L'auteur fournit des liens vers la documentation pertinente de PostgreSQL.
favicon
dev.to
PostgreSQL Full Text Search Rank by Position
Create attached notes ...