0

黒点の宝石で検索するのに問題があります。オブジェクトテナントでユーザーのメールアドレスを検索したい。

テナントには多くのユーザーがいます

テナントで私はこれをしました:

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

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ます。あなたの混乱は命名規則の周りにあるようです。doブロックに含まれるものを定義する限り、必要なものに電子メール属性を定義することができます。このように定義します。

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

私に同じ機能を与えたとしたら、Sunspotだけが変数名をqf=>emails_textdurningインデックス時間に変換します。

于 2012-07-21T19:05:49.253 に答える