在多列sql上进行多关键字搜索

时间:2019-08-16 06:51:04

标签: sql ruby-on-rails ruby

我尝试在我的网站上进行多关键字搜索。

我想找到每一个包含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

1 个答案:

答案 0 :(得分:1)

正如您所解释的,标题应该包含AB,或者内容应该包含AB

您可以尝试:

Article
  .where("title LIKE '%A%' AND title LIKE '%B%'")
  .or(Article.where("content LIKE '%A%' AND content LIKE '%B%'"))

我在这里对LIKE的值进行硬编码,也许您可​​以添加一个示例来说明如何更新它。