7

Sunspotとの関連付けを通じてインデックスを作成することは可能ですか?

たとえば、Customer has_manyの連絡先がある場合、Customerの検索で使用するためにContact#first_name列とContact#last_name列にインデックスを付けるCustomerモデルの「searchable」ブロックが必要です。

Acts_as_solrには、このための:includeオプションがあります。以下に示すように、関連付けられた列名をCustomerのテキストフィールドに結合しているだけですが、これはあまり柔軟ではないようです。

searchable do
text :organization_name, :default_boost => 2
text :billing_address1, :default_boost => 2
text :contact_names do
  contacts.map { |contact| contact.to_s }
end

助言がありますか?

4

2 に答える 2

6

それはまさにそれを行う方法です。Solrは本質的にドキュメント指向であるため、データベース内の関連付けから取得されるデータはすべてドキュメントにフラット化されます。:includeオプションは、ここで行うのと同じことを行うことになるマイルドシュガーです。

于 2010-04-11T02:00:49.480 に答える
0

もちろん:

searchable do
  string :sort_contact_name do
    contacts.map { |contact| contact.last_name }.sort.first
  end
end

次に、:sort_contact_nameフィールドで並べ替えることができます。Solrはドキュメントごとに単一の値を持つフィールドでしかソートできないため、連絡先名のセットを単一の名前に減らす必要があることに注意してください(これは、考えてみると理にかなっています)。

于 2010-04-11T13:57:41.410 に答える