2012-04-20 18 views
4

在我的Rails應用程序中,我使用太陽黑子來索引幾個不同的模型。然後我有一個全球搜索表單,返回混合結果。這工作正常:Rails +太陽黑子:多模型搜索,但只有其中一個模型的某些領域?

Sunspot.search(Person, EmailAddress, PhoneNumber, PhysicalAddress) do 
    fulltext params[:q] 
    paginate :per_page => 10 
end 

我想添加一個額外的模型,說項目,這個搜索。項目模型有相當多的被索引:

class Project < ActiveRecord::Base 
    searchable do 
    string :category do 
     category.name.downcase if category = self.category 
    end 

    string :client do 
     client.name.downcase if client = self.client 
    end 

    string :status 

    text :tracking_number 
    text :description 

    integer :category_id, :references => Category 
    integer :client_id, :references => Client 
    integer :tag_ids, :multiple => true, :references => Tag 

    time :created_at, :trie => true 
    time :updated_at, :trie => true 
    time :received_at, :trie => true 
    time :completed_at, :trie => true 
    end 
end 

如何修改我原來Sunspot.search呼籲增加僅由tracking_number領域尋找項目記錄和description場?

回答

0

我認爲你必須將你的tracking_number定義爲文本字段而不是字符串字段。僅在「文本字段」上進行全文搜索。

你有沒有嘗試這個辦法:

text:tracking_number 

而且你的太陽黑子搜索樣子:

Sunspot.search(Person, EmailAddress, PhoneNumber, PhysicalAddress, Project) do 
    fulltext params[:q] 
    paginate :per_page => 10 
end 

見你

+0

感謝您的回覆。是的,我應該使用'text'方法。但是,我的意思是關注如何在進行多模式搜索時將搜索限制在給定模型的一個字段中。我會更新這個問題,以便更加精確。 – robertwbradford 2012-04-25 16:02:25

+0

我做了一個其他答案/解決方案 – Sebastien 2012-04-25 16:43:34

+0

但如何顯示它在視圖? – brabertaser19 2014-04-02 21:17:31

0

你嘗試類似:

Sunspot.search(Post) do 
    keywords 'great pizza', :fields => [:title, :body] 
end 

你可以做一個r請求每個模型,然後將結果連接到一個列表中。我認爲你無法在一次搜索中完成。

+0

再次感謝您的回覆。我想這可能會起作用,但它似乎會破壞所有結果的分頁和排序等。有沒有解決的辦法? – robertwbradford 2012-04-25 18:16:50

+0

使用will_paginate可以對concataned數組進行分頁。我認爲這不是問題。 – Sebastien 2012-04-26 08:34:07

+2

也打破基於分數的自動排序 – Kevin 2012-11-13 02:53:16

4
Sunspot.search(Person, EmailAddress, PhoneNumber, PhysicalAddress, Project) do 
    fulltext params[:q] do 
    fields(:tracking_number, :other_fields_outside_your_project_model) 
    end 

    paginate :per_page => 10 
end 

這將做TRACKING_NUMBER場和您指定的任何其他領域的全文搜索,特別是在你的人,EmailAddress的,******中國和PhysicalAddress模型。

+0

但如何顯示它的視野? – brabertaser19 2014-04-02 21:16:04

+0

搜索將返回可能具有不同類型的匹配記錄列表。調用respond_to後,您可以在記錄中顯示屬性或方法的返回值?在該記錄的屬性/方法上。 – konyak 2014-04-03 04:26:05

+0

也許你可以給這個代碼? – brabertaser19 2014-04-03 11:11:48

相關問題