0

私はPostgreSQL の全文検索機能を使用していますが、これは正常に機能します。関連するすべての列にインデックスが付けられているため、高速です。

  def self.text_search(query)
    if (query.present?)
      # search(query)
      where(
          "to_tsvector('english', title) @@ plainto_tsquery(:q)",
          q: query
      )
    else
      scoped
    end
  end

しかし、関連する略語も検索したいと思います。

def self.text_search(query)
    if (query.present?)
      # search(query)
      includes(:abbreviations).where(
          "to_tsvector('english', articles.title) @@ plainto_tsquery(:q)"+
          " or to_tsvector('english', abbreviations.abbreviation) @@ plainto_tsquery(:q)",
          q: query
      )
    else
      scoped
    end
  end

これは機能しますが、クエリに 2.5 秒以上かかるようになりました。これを解決するにはどうすればよいですか?おそらくこれは Rails の非効率性であると考えていたので、生の SQL を実行するのが最善でした。しかし、どうすればそれを行い、それでも ActiveRecord リレーションを取得できますか?

4

1 に答える 1