2010-03-18 47 views
0

我正在使用acts_as_solr在項目中進行搜索。不幸的是,保存模型時,索引似乎沒有更新相關模型。acts_as_solr未更新Rails中的關聯模型

例子:

我有三個型號:

class Merchant < ActiveRecord::Base 
    acts_as_solr :fields => [:name, :domain, :description], :include => [:coupons, :tags] 
    ... 
end 

class Coupon < ActiveRecord::Base 
    acts_as_solr :fields => [:store_name, :url, :code, :description] 
    ... 
end 

class Tag < ActiveRecord::Base 
    acts_as_solr :fields => [:name] 
    ... 
end 

我使用下面的行來執行搜索:雖然

Merchant.paginate_by_solr(params[:q], :per_page => PER_PAGE, :page => [(params[:page] || 1).to_i, 1].max) 

出於某種原因,在我添加優惠券在說明中包含「鞋」這個詞,對「鞋」的查詢不會返回與優惠券相關聯的商家。該協會都工作,如果我運行耙子solr:reindex,搜索然後返回新的優惠券。

每次創建新優惠券時,是否需要更新Merchant的索引?我是否必須更新整個班級的索引,還是隻需更新關聯的商家?

不應該這樣做自動?

回答

1

好的,結果發生了一些事情。

在優惠券的模式,我把一個after_save的回調函數來更新相關商家Solr的文檔:

def update_merchant_solr 
    merchant.solr_save 
end 

標籤問題是由於對acts_as_solr和i​​s_taggable的after_save的回調的順序。商家after_save中的solr插入發生在is_taggable回調之前,因此,當調用商家solr回調來更新其文檔時,標籤尚未與其關聯。切換訂單工作:

class Merchant < ActiveRecord::Base 
    is_taggable :tags 
    acts_as_solr :fields => [:name, :domain, :description], :include => [:coupons, :tags] 
    ... 
end 
+0

在我的應用程序中,我用'model.touch'。 – jonnii 2010-03-21 00:55:21

1

我使用太陽黑子,所以可能會有差異,但我不得不在相關模型上設置回調以重新索引父記錄。我猜你必須做同樣的事情。

+0

是的,正如你可以從上面看到的,這就是我最終不得不做的。謝謝。 – 2010-03-20 14:36:20