2010-10-25 2 views

ответ

9

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 

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

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

Спасибо Wolph. Сначала было очень сложно понять, но, наконец, я получил работу. – sNiCKY

+0

Что такое * 'textearch'? По крайней мере, это не имя столбца. В документации эти данные опущены. – Timmmm

+0

@Timmmm: документация, возможно, немного трудно читать в этом аспекте. Это 'ts_vector', который вы можете создать следующим образом:« SELECT to_tsvector («английский», «толстый кот сидел на коврике - он съел толстых крыс»); ' – Wolph

Смежные вопросы