Rails 3太阳黑子has_many协会

时间:2012-07-18 00:35:36

标签: ruby-on-rails sunspot sunspot-rails

我在搜索太阳黑子宝石时遇到了麻烦。我想在对象租户中搜索用户电子邮件。

租户有很多用户

在租客中我这样做了:

searchable do
  text :name, :notifications_email

  text :users do  
    users.map(&:email)  
  end
end

搜索namenotifications_email的工作正常,但是当我搜索用户的电子邮件时,找不到结果。

我在控制台中这样做了:

s = Tenant.solr_search do fulltext "info" end

我得到了这个对象:

<Sunspot::Search:{:fq=>["type:Tenant"], :q=>"info", :fl=>"* score", :qf=>"name_text   notifications_email_text users_text", :defType=>"dismax", :start=>0, :rows=>30}>

让我感到困惑的是users_text不一定是users_email_text或类似的东西吗?

1 个答案:

答案 0 :(得分:0)

为了更清楚,您应该定义可搜索的块,如:

searchable do
  text :name
  text :notifications_email
  text :users_email do  
    users.map(&:email)
  end  
end

在索引时间内,Sunspot会将属性的类型附加到属性名称的末尾。如果是:users_email,则会转为qf=>users_email_text。您的混淆似乎与命名约定有关。我可以将email属性定义为我想要的任何内容,只要我定义了do块中包含的内容即可。像这样定义:

searchable do
  text :name
  text :notifications_email
  text :emails do  
    users.map(&:email)
  end  
end

本来会给我相同的功能,只是太阳黑子会将变量名转换成qf=>emails_text转折指数时间。