太阳黑子搜索完全匹配电子邮件

时间:2014-05-14 18:02:58

标签: ruby-on-rails ruby solr sunspot

您好今天我遇到了Sunspot Solr的问题,我无法让它在精确的电子邮件搜索中工作,我已经尝试了几个小时,最后我总结了这个解决方案,但它仍然不能完全匹配。

例如,我需要输入一封电子邮件mushos32@yahoo.gr,如果我写了mushos32@yahoo.g或者除了原始组合之外的任何其他组合,则应该给我1个结果。 >

我目前的代码是

model
 searchable do
 text :email
 String :email

end

控制器

 def search


 @users = User.search do
  keywords params[:query]
 end.results

 respond_to do |format|
  format.html { render :action => "index" }
  format.xml  { render :xml => @users }
 end
end

查看/用户/显示

  <%= form_tag search_users_path, :method => :get do %>
<p>
  <%= text_field_tag :query, params[:search] %>
  <%= submit_tag "Search" ,:email => nil %>

</p>
<% if @users.empty? %>
    <p>Your search did not return any results. </p>
<% else %>
<% for user in @users %>
    <tr>

      <td><%= link_to user.name, user %> <%= link_to user.surname, user %></td>
      <%= hidden_field_tag :direction, params[:direction] %>
      <%= hidden_field_tag :sort, params[:sort] %>
      <td><%= image_tag user.photo.url(:thumb) %></td>
      <td><%= link_to "Connect", friendships_path(:friend_id => user), :method => :post %></td>
    </tr>
<%end%>
你可以帮帮我吗?我尝试重新索引,重新启动solr服务器的一切,但似乎没有工作

2 个答案:

答案 0 :(得分:3)

由于您只想在字段上进行完全匹配,因此最简单的解决方案是使其成为字符串字段而不是文本字段:

class User < ActiveRecord::Base
  searchable do
    string :email
  end
end

这样您就可以在控制器中搜索用户:

def search
  @users = User.search do
    with(:email, params[:query])
  end.results

  respond_to do |format|
    format.html { render :action => "index" }
    format.xml  { render :xml => @users }
  end
end

有关详细信息,请参阅Sunspot documentation

答案 1 :(得分:0)

似乎使用equal_to只是为整数工作,而不是使用String。 此时我使用Text而不是String来索引字符串。但是,这太糟糕了