改进PostgreSQL全文搜索

时间:2016-02-29 08:40:32

标签: postgresql

我正在尝试在Postgres中实现基本的全文搜索。我对物化视图索引提出了一些改进搜索的问题:

  1. 我使用物化视图将搜索数据存储在一个名为document的列中(数据类型:tsvector)。我有大约1000条记录,当我尝试使用或不使用索引进行某些查询时,搜索时间是相同的。

    那么我需要在此视图上使用索引吗?

    哪种类型的指数更好,GIN还是GIST? (我每天还有1-2条记录,很少更新)

  2. 插入记录后,我需要刷新物化视图。

    如果我使用INDEX,我需要REINDEX吗?

    当视图刷新时,使用它的查询必须等待刷新完成。如何解决?

  3. 编辑:

    • 我使用命令创建物化视图:

      CREATE MATERIALIZED VIEW search_index AS 
      SELECT p.id AS id, p.title AS title, p.published_at as published_at, u.name AS author, 
             setweight(to_tsvector('simple', unaccent(p.title)), 'A') ||     
             setweight(to_tsvector('simple', unaccent(p.content)), 'B') || 
             setweight(to_tsvector('simple', unaccent(u.name)), 'C') AS document
      FROM posts AS p
      JOIN users AS u ON p.created_by = u.id
      
    • 搜索查询(使用键'框架'的示例):

      SELECT * FROM search_index
      WHERE document @@ plainto_tsquery('simple', 'framework')
      ORDER BY published_at DESC
      
    • 创建索引:

      CREATE INDEX idx_fts_search ON search_index USING GIN(document);
      

    =>搜索时间约为185毫秒(167行)甚至使用索引。

    • 使用解释命令时(我不明白此命令)

      没有索引

      enter image description here

      使用索引

      enter image description here

0 个答案:

没有答案