2010-03-26 40 views
8

我之前沒有實現過搜索功能,感覺有點卡住了。我有一個基於關鍵字查找結果的太陽黑子搜索功能 - 這很好 - 但我現在想要實現多選小平面功能,但我似乎無法弄清楚如何設置基本的方面搜索。如何使用太陽黑子設置多對多關係的方面搜索?

我有一個多對多的關係(在軌沒有在現實生活中):

級人物的has_many:技能:通過=>經驗(反之亦然等)

Class People < ActiveRecord::Base 
    has_many :skills, :through => experience 

    searchable do 
    text :first_name, :surname 
    end 
end 

在控制器

@search = Sunspot.search(People) 
    facet :skill_ids 
end 

這是我無法工作的基本示例。它生成此錯誤:

Sunspot::UnrecognizedFieldError: No field configured for People with name 'skill_ids' 

如何創建鏈接:skill_ids

我想我一定會丟失在模型的一些參考 - 但沒有例子,我可以找到可做參考的ID一段關係。我發現的大多數示例都使用了使用facet功能時已經在該模型中的列。

  • 我該如何獲得基本的實施工作?
  • 我該如何在視圖中使用它 - 我是否必須調用hits.facet並遍歷技巧?代碼看起來像什麼來顯示這個?
  • 我該如何選擇多個構面進行搜索?
  • 我應該把這個在社區維基?

謝謝你的時間!

回答

13

任何你想過濾,方面或命令,太陽黑子需要知道。因此,在您的型號中:

searchable do 
    text :first_name, :surname 
    integer :skill_ids, :multiple => true, :references => Skill 
end 

您的#search調用在您的控制器中看起來正確。在你看來,你會做一些事情沿着這些路線:該行的值是指(這是什麼:references選項在searchable定義做)

- @search.facet(:skill_ids).rows.each do |row| 
    = row.instance.name 

row.instance將返回技術的實例。

我不知道你所說的「選擇多個方面通過搜索」的意思 - 一個可以產生多個方面通過在搜索調用facet方法多次(這給用戶選擇進一步細化搜索) ;然後你可以使用他們的方面選擇和範圍限制,使用with方法,你也可以多次調用你想要的方法。

說到維基,其中的大部分信息在黑子維基可用(有說明):

+1

謝謝!我無法找到對Wiki中或其他地方的多個部分的引用 - 必須使用錯誤的搜索術語或其他內容。您對「選擇多個方面進行搜索」的含義有了正確的想法 - 換言之:通過多項選擇進行篩選。 這個維基對我來說是有意義的,並且有一個工作演示來測試!接下來我會嘗試添加過濾功能:我是否認爲我可以創建link_to並傳入參數以提供其他方面,或者是否還有很長的路要走? 再次感謝! – 2010-03-26 14:09:55