Rails 4 - 搜索所有关键字的搜索框

时间:2014-09-09 05:26:13

标签: ruby-on-rails

我按照了有关设置搜索框的教程,让它可以处理精确的短语搜索。我想让它搜索包含所有搜索关键字的结果。

例如,搜索"红色项链"应该归还一种名为" Red Chain Necklace"但不应该回归"红色耳环"。

我已经看过一些关于像searchlogic和ransack这样的宝石的轨道广播,但是对于我想要做的事情来说,它们似乎太过分了。

#model code
def self.search(query)
  where("description like ? or name like ?", "%#{query}%", "%#{query}%")
end


#controller code
def search
    @listings = Listing.search(params[:search])
end

#view
<%= form_tag(search_path, :method => "get", id: "search-form", class:"navbar-form navbar-right") do %>
<%= text_field_tag :search, params[:search], placeholder: "Search by color or style...", class:"form-control search-form" %>
<button type="submit" class="btn btn-default btn-md"><span class="glyphicon glyphicon-search"></span></button>
<% end %>

我在SO上读到了其他一些提及.split方法的答案。我在几个方面尝试过,但无法让它发挥作用。

2 个答案:

答案 0 :(得分:0)

假设,

@products = Product.all
search_query = "Red Necklace"

search_query = "Red Necklace".split(" ")

//现在,search_query变为[“红色”,“项链”]

现在,在每个产品中搜索这些值,以找到正确的产品。

result = []
@products.each do |p|
   c = 0
   search_query.each do |q|
     if p.name.include?(q)
       c +=1
     end
   end
   if c == search_query.length
     result << p
   end
end

这是一个缓慢的过程,复杂性很高。

答案 1 :(得分:0)

全文搜索

您正在寻找的是full text search,使用标准MYSQL相对难以实现。

您遇到的问题是数据库引擎并非专门设计为&#34;搜索&#34;引擎。它们意味着存储和存储的方式。组织数据。因此,&#34;全文&#34;这些系统的搜索工具仅基于查询界面。

我确信有人更有经验和帮助知识渊博,我可以解释这个具体细节;我只想说,为了创建您想要的搜索功能,您将要使用第三方搜索应用程序之一:

  

这里的不同之处在于,所有这些建议都索引您的数据,从而可以提供更深入,更高效的数据。具体搜索。虽然我没有特别使用它们,但我强烈建议使用上述方法之一。

-

<强> Solr的

您想查看有关Solr工作原理的this Railscast

enter image description here

我可以给予我很大的帮助,我很害怕。我知道你不想要这个,但这是你获得所需功能的最佳方式