【问题标题】:Is a DB index possible to optimize a pg_search, pg_search_scope method?数据库索引是否可以优化 pg_search、pg_search_scope 方法?
【发布时间】:2013-01-08 03:56:36
【问题描述】:

我正在努力将搜索添加到我的 PostgreSQL 9.1 rails 应用程序中。这是设置:

class Comment < ActiveRecord::Base
  include PgSearch
  pg_search_scope :search_by_content, :against => :content

Rails C,命令:

 Comment.where(:commentable_id => 33).search_by_content('pgsql').count

Rails 日志:

(348.1ms)  SELECT COUNT(*) FROM "comments" WHERE "comments"."commentable_id" = 33 AND (((to_tsvector('simple', coalesce("comments"."content"::text, ''))) @@ (to_tsquery('simple', ''' ' || 'pgsql' || ' '''))))

安装 gem 并设置评论模型后,说明中没有提到添加 db 索引以优化性能。鉴于查询在本地已经花费了 348.1 毫秒,我很好奇这是否可以优化以提高性能?

谢谢

【问题讨论】:

  • 对于我们这些不会说 Rails 的人来说,pg_search 运行了哪些底层查询?是全文搜索吗?如果是这样,请阅读 PostgreSQL 全文搜索手册,其中讨论了全文搜索的 GiST 索引。
  • 正在运行的查询显示在上面的“Rails 日志”中,它显示了发送到 PostgreSQL 的原始 SQL
  • 呸,我瞎了。对不起。所以是的,它使用的是全文搜索。

标签: ruby-on-rails ruby-on-rails-3 postgresql postgresql-9.1 pg-search


【解决方案1】:

Rails 似乎正在使用全文搜索 - 请参阅 PostgreSQL documentation on full text search,尤其是 creating indexes 部分。

Rails 对 tsearch2 表达式做了一些非常奇怪的事情,这可能会使创建 PostgreSQL 识别为匹配的索引变得更加困难。见this prior question

使用EXPLAIN ANALYZE 来验证它是否正在使用索引。

【讨论】:

    猜你喜欢
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2012-02-08
    相关资源
    最近更新 更多