2010-03-18 2 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) 

어떤 이유를 그 '신발'이라는 단어가 설명에 포함되어있는 경우 '신발'에 대한 검색어는 쿠폰과 연결된 판매자를 반환하지 않습니다. 연결은 모두 작동하며 rake solr : reindex를 실행하면 검색이 새로운 쿠폰을 반환합니다.

새 쿠폰을 만들 때마다 판매자 색인을 업데이트해야합니까? 전체 클래스의 색인을 업데이트해야합니까? 아니면 관련 판매자를 업데이트 할 수 있습니까?

자동으로 실행하면 안됩니까?

답변

1

좋아, 몇 가지 일이 벌어지고있는 것으로 나타났습니다. 때문에 acts_as_solr 및 is_taggable에 after_save 콜백의 순서에

def update_merchant_solr 
    merchant.solr_save 
end 

태그 문제가 있었다 : 쿠폰 모델에

, 나는 관련 상인의 SOLR의 문서를 업데이트하기 after_save 콜백에 넣어. isr 삽입이 완료된 상인 after_save는 is_taggable 콜백 이전에 발생 했으므로 merchant solr 콜백이 호출되어 doc을 업데이트 할 때 태그가 아직 연결되지 않았습니다. 순서 전환 :

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

내 응용 프로그램에서'model.touch'를 사용했습니다. – jonnii

1

나는 차이가있을 수 있으므로 Sunspot을 사용하지만 관련 모델에서 콜백을 설정하여 상위 레코드를 다시 색인화해야했습니다. 나는 너를 똑같이해야 할 것 같아.

+0

위의 내용에서 알 수 있듯이 그렇게해야만합니다. 감사. –

관련 문제