Mysql
 sql >> Database >  >> RDS >> Mysql

Query FULLTEXT con punteggi/classifiche in Postgresql

La ricerca fulltext di Postgres è leggermente diversa dalla ricerca fulltext di MySQL. Ha molte più opzioni, ma può essere un po' più difficile far funzionare come preferisci.

Questo documento spiega come classificare i risultati della ricerca, ma ti consiglio vivamente di leggere l'intera sezione fulltext del manuale per avere un'idea di cosa puoi fare con esso:http://www.postgresql.org/docs/current/interactive/textsearch-controls.html#TEXTSEARCH-RANKING

Fondamentalmente, l'equivalente della tua query sarebbe questo:

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

Come puoi vedere, questo utilizza textsearch che è qualcosa che dovrai definire te stesso. Per la versione breve, leggi:http://www.postgresql. org/docs/current/interactive/textsearch-tables.html

La query è essenzialmente molto semplice:

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

Ma consiglio vivamente di aggiungere anche gli indici:

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