我使用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 关系?