May 2018
Intermediate to advanced
576 pages
30h 25m
English
Consider the following scenario: a full-text search returns 10,000 documents, but only the first 20 are displayed to users. In this case, order the documents by ranking on the server, and return only the top 20 that actually need to be displayed:
SELECT title, ts_rank_cd(body_tsv, query, 20) AS text_rankFROM articles, plainto_tsquery('spicy potatoes') AS queryWHERE body_tsv @@ queryORDER BY rank DESCLIMIT 20;
If you need the next 20 documents, don't just query with a limit of 40 and throw away the first 20. Instead, use OFFSET 20 LIMIT 20 to return the next 20 documents.
To gain some stability so that documents with the same rank still come out in the same order when using OFFSET 20, add a unique field (like the id column of ...