0

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

租户有很多用户

在租户中,我这样做了:

searchable do
  text :name, :notifications_email

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

搜索nameandnotifications_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这样的吗?

4

1 回答 1

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

会给我相同的功能,只是 Sunspot 会将变量名称转换为qf=>emails_text索引时间。

于 2012-07-21T19:05:49.253 回答