全文搜索查询
SELECT id
FROM (
SELECT id,
ts_rank_cd(setweight(to_tsvector('english', lower(title)), 'A') ||
setweight(to_tsvector('english', lower(body)), 'B'),
plainto_tsquery('english', 'query')) AS rank
FROM table) s
ORDER BY rank DESC LIMIT 50 OFFSET 0;
创建索引命令
CREATE INDEX fts_index ON table USING
gin((setweight(to_tsvector('english', lower(title)), 'A') ||
setweight(to_tsvector('english', lower(body)), 'B')));"
该表包含超过90,000行,但postgres选择执行顺序扫描,这需要几分钟,而不是使用索引。
答案 0 :(得分:0)
无法使用索引。
此处唯一使用的索引是支持ORDER BY
子句,为此,索引必须是完整表达式上的常规B树索引,即在您的查询中命名为rank
。