我在搜索太阳黑子宝石时遇到了麻烦。我想在对象租户中搜索用户电子邮件。
租户有很多用户
在租客中我这样做了:
searchable do
text :name, :notifications_email
text :users do
users.map(&:email)
end
end
搜索name
和notifications_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
或类似的东西吗?
答案 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
转折指数时间。