FULLTEXT запрос с оценками / рангами в Postgresql - PullRequest
4 голосов
/ 25 октября 2010

Я новичок в Postgres, и я не знаю, как перевести этот запрос MySQL в postgres:

SELECT pictures.id, MATCH (title, cached_tag_list) AGAINST ('phrase') AS score FROM pictures WHERE MATCH (title, cached_tag_list) AGAINST ('phrase') ORDER BY score DESC;

1 Ответ

10 голосов
/ 25 октября 2010

Полнотекстовый поиск Postgres немного отличается от полнотекстового поиска MySQL.У него гораздо больше опций, но может быть немного сложнее заставить работать так, как вам нравится.

В этом документе рассказывается о том, как ранжировать результаты поиска, но я настоятельно рекомендую вам прочитать весь текстовый раздел изруководство, чтобы получить представление о том, что вы можете с ним сделать: http://www.postgresql.org/docs/current/interactive/textsearch-controls.html#TEXTSEARCH-RANKING

В основном, эквивалент вашего запроса будет следующим:

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

Как вы можете видеть, это используетtextsearch это то, что вы должны будете определить сами.Для краткой версии читайте: http://www.postgresql.org/docs/current/interactive/textsearch-tables.html

Запрос по сути очень прост:

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

Но я бы настоятельно рекомендовал добавить индексы так же:

CREATE INDEX pictures_title ON pictures USING gin(to_tsvector('english', title));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...