我尝试在我的网站上进行多关键字搜索。
我想找到每一个包含A和B的帖子。
例如,如果我搜索“ A B ”
我应该找到这些帖子:
标题: A cd B afd
内容:zzzzzz
还有这个
标题:ddddd
内容: A ttt B cccd
但不是这个
标题: A ttttt
内容: B wwwwww
因为标题或内容未包含我要查找的所有关键字。
目前,我已经发出了有效的请求
keys = params[:search].split(' ')
Article.where((["title LIKE ? OR content LIKE ?"] * keys.size).join(' AND '), *(keys.map { |key| ["%#{key}%", "%#{key}%"] }.flatten)).where(activate: true).order(created_at: :desc)
但是AND与OR的作用相同。它向我展示了我举的3个例子。
您认为我应该将其分为两个请求吗?
铁路5.2
答案 0 :(得分:1)
正如您所解释的,标题应该包含A
和B
,或者内容应该包含A
和B
。
您可以尝试:
Article
.where("title LIKE '%A%' AND title LIKE '%B%'")
.or(Article.where("content LIKE '%A%' AND content LIKE '%B%'"))
我在这里对LIKE的值进行硬编码,也许您可以添加一个示例来说明如何更新它。