Я пытаюсь вернуть только первые N результатов для запроса, который использует ts_rank (). Я не знаю, какой будет N для каждого запроса, поэтому я не могу ORDER BY Score DESC LIMIT X, потому что я не знаю, какой будет X.
В моем текущем подходе я использую rank () в сочетании с ts_ranking, и в результате ранжирование всегда одинаково. Как я могу получить разные ранги, основываясь на счете, возвращенном ts_ranking? Здесь должны быть две рейтинговые группы из трех имен: 1 и 2 (на основе показанного балла).
SELECT rank_filter.* FROM (
SELECT
name,
ts_rank(textsearchable_index_col, keywords) as score,
rank() OVER (
PARTITION BY ts_rank(textsearchable_index_col, keywords)
) as ranking
FROM organization, to_tsquery('english', 'Obviously') keywords
WHERE keywords @@ textsearchable_index_col ORDER BY score DESC
) as rank_filter;
name | score | ranking
------------------------+-----------+---------
B-Obvious | 0.0759909 | 1
Obviously | 0.0759909 | 1
Obvious Engineering | 0.0759909 | 1
LexDex | 0.0607927 | 1
Qualitest Turkey | 0.0607927 | 1
Obvious Software | 0.0607927 | 1
Желаемый результат будет следующим:
name | score | ranking
-----------------------+-----------+---------
B-Obvious | 0.0759909 | 1
Obviously | 0.0759909 | 1
Obvious Engineering | 0.0759909 | 1
LexDex | 0.0607927 | 2
Qualitest Turkey | 0.0607927 | 2
Obvious Software | 0.0607927 | 2