0
我對Postgres全文搜索相對較新,但仍然試圖理解它。我正在研究如何在PostgreSQL全文搜索中優化此查詢。查詢看起來是這樣的:改進PostgreSQL FTS查詢
SELECT articles.article_id, article_title, article_excerpt, article_author, article_link_perm, article_default_image, article_date_added, article_bias_avg, article_rating_avg, article_keywords,
ts_rank(search_vector, to_tsquery('snowden|obama|nsa')) AS rank
FROM development.articles
WHERE search_vector @@ to_tsquery('english', 'snowden|obama|nsa') AND ts_rank(search_vector, to_tsquery('snowden|obama|nsa')) > .045 ORDER BY article_date_added DESC, rank DESC LIMIT 20
而且EXPLAN ANAYLIZE看起來是這樣的:
Limit (cost=20368.26..20368.31 rows=20 width=751) (actual time=276.006..276.101 rows=20 loops=1)
-> Sort (cost=20368.26..20376.91 rows=3459 width=751) (actual time=276.001..276.035 rows=20 loops=1)
Sort Key: article_date_added, (ts_rank(search_vector, to_tsquery('snowden|obama|nsa'::text)))
Sort Method: top-N heapsort Memory: 42kB
-> Bitmap Heap Scan on articles (cost=1136.19..20276.22 rows=3459 width=751) (actual time=22.735..273.558 rows=600 loops=1)
Recheck Cond: (search_vector @@ '(''snowden'' | ''obama'') | ''nsa'''::tsquery)
Filter: (ts_rank(search_vector, to_tsquery('snowden|obama|nsa'::text)) > 0.045::double precision)
-> Bitmap Index Scan on article_search_vector_index (cost=0.00..1135.33 rows=10377 width=0) (actual time=20.512..20.512 rows=9392 loops=1)
Index Cond: (search_vector @@ '(''snowden'' | ''obama'') | ''nsa'''::tsquery)
Total runtime: 276.674 ms
正在使用的是GIN,因爲我更在乎的搜索和更新索引。我注意到這個查詢中的一些問題是'|'我補充說,它越慢。有什麼方法可以優化這個查詢以獲得體面的速度結果?
按日期排序是必需的,因爲日期順序很重要。除了|之外還有其他我應該使用的東西嗎?運營商? –
如果你真的認爲它是正確的話,那麼'|'是正確的:搜索乾草堆裏的所有物品,這些物品都擁有針或飛鏢或釘或棒。想想索引作爲主要的pg來探索這個或那部分大海撈針找到相關的文章。搜索範圍越廣,探索的草垛越多,有效行數越多。然後你需要對它們進行分類,而不需要索引。 –