Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête FULLTEXT avec scores/rangs dans Postgresql

La recherche en texte intégral Postgres est un peu différente de la recherche en texte intégral MySQL. Il a beaucoup plus d'options mais peut être un peu plus difficile à faire fonctionner comme vous l'aimez.

Ce document vous indique comment classer vos résultats de recherche, mais je vous recommande vivement de lire l'intégralité de la section de texte intégral du manuel pour avoir une idée de ce que vous pouvez en faire :http://www.postgresql.org/docs/current/interactive/textsearch-controls.html#TEXTSEARCH-RANKING

En gros, l'équivalent de votre requête serait ceci :

SELECT pictures.id, ts_rank_cd(textsearch, 'phrase') AS score
FROM pictures
ORDER BY score DESC

Comme vous pouvez le voir, cela utilise textsearch c'est quelque chose que vous devrez définir vous-même. Pour la version courte, lisez :http://www.postgresql. org/docs/current/interactive/textsearch-tables.html

La requête est essentiellement très simple :

SELECT pictures.id, ts_rank_cd(to_tsvector('english', pictures.title), 'phrase') AS score
FROM pictures
ORDER BY score DESC

Mais je recommanderais fortement d'ajouter également des index :

CREATE INDEX pictures_title ON pictures USING gin(to_tsvector('english', title));