私は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 リレーションを取得できますか?