【发布时间】:2026-01-07 13:05:02
【问题描述】:
我的网站中有搜索帖子功能。它允许用户按标题和内容搜索帖子。我想将search by title 的匹配结果优先于search by content。
例如:
发帖
id 1
title "Sample Title"
content "Content 1"
id 2
title "Random"
content "But it contains Title here"
当使用查询“标题”进行搜索时,我希望它返回两个结果,但优先考虑 id 1 而不是 2。
我尝试做的事情:
后模型:
scope :search_by_title, -> (keyword) {
return if keyword.nil?
where('title LIKE ?', "%#{sanitize_sql_like(keyword)}%")
}
scope :search_by_content, -> (keyword) {
return if keyword.nil?
where('content LIKE ?', "%#{sanitize_sql_like(keyword)}%")
}
然后在我的控制器中:
@posts_by_title = Post.search_by_name(query)
@posts_by_content = Post.search_by_content(query)
@posts = @posts_by_title + @posts_by_content
它可以工作,但需要查询 2 次。所以我只是想知道有没有更好的方法来实现这个结果?
【问题讨论】:
-
你知道
gem searchkick吗? -
@Vishal 我还没有尝试过那个 gem,但是值得用那个 gem 来解决这个问题吗?
-
是的,使用这个 gem,你会得到很多功能,在 searchkick gem 引擎盖下使用弹性搜索。我相信你知道弹性搜索
标签: ruby-on-rails sorting search