2012-11-13 2 views
1

저는 타이어와 탄성 검색을 사용하려고하는 레일즈 3.2 어플리케이션에 Ruby를 사용하고 있습니다.레일 타이어 : 커스텀 로직과 함께 가져 오기

그때 탄성 검색에 기록의 초기 가져 오기를 수행
include Tire::Model::Search 
include Tire::Model::Callbacks 

호출하여 :

rake environment tire:import CLASS=User FORCE=true 

가를 사용자 정의 할 수 있는가

나는 다음과 같은 선언이있는 사용자 모델을 가지고 한 사용자를 건너 뛸 수 있도록 가져 오기 작업이 필요합니까? 색인을 생성하지 않으려는 시스템 사용자가 있습니까?

답변

3

먼저, 레이크 작업이 가장 일반적인 경우에만 편리한 방법입니다, 당신은 당신의 자신의 인덱싱 코드를 작성해야한다 - 매우해야 쉬운. 당신이 레코드가 인덱스되어 있는지 여부를 특정 조건이 없거나 경우

둘째, 당신은 README이 지시 한 일을해야하지 include Tire::Model::Callbacks을하고 인덱싱 라이프 사이클을 직접 관리, 예와 :

after_save do 
    update_index if state == 'published' 
end 
+0

때로 믿을 수 ' 두 단계가 따로 따로 있습니까? 레이크 작업은 기존 데이터를 Elasticsearch로 가져올 때 콜백이 업데이트되거나 삭제 될 때의 초기로드를위한 것입니다. 그것은 내 대답과 귀하의 대답을 조합하여 색인에서 항목을 올바르게 제외시키는 것 같습니다. – Planty

+0

맞습니다. 그러나이 경우와 같이 특수한 경우에는 맞춤 색인 생성 메커니즘을 세부적으로 조정하는 데 시간을 투자하는 것이 좋습니다 (예 : https://github.com/karmi/tire/issues/509 – karmi

+0

감사합니다. 지금은 더 잘 이해했기 때문에 기쁩니다. 초기로드 문제를 해결하고 진행중인 업데이트 나 새로운 시스템 사용자가 문제를 일으키는 것을 방지하기 위해 두 부분을 모두 넣을 것입니다. – Planty

1

나는 내 문제에 대한 대략적인 해결책을 발견했으며 다른 누군가가이 문제를 접할 경우에 대비하여 뭔가를 게시하고 싶었습니다. 누구든지 더 좋은 제안이 있으면 알려 주시기 바랍니다.

결국 일반 가져 오기를 모두 호출하는 타이어 작업을 작성한 다음 색인에서 시스템 계정을 삭제합니다. 더 복잡한 상황의 경우 등, elasticsearch/타이어를 시도 할 때

namespace :tire do 
    desc 'Create search index on User' 
    task :index_users => :environment do 
    ENV['CLASS'] = 'User' 
    ENV['FORCE'] = 'TRUE' 
    Rake::Task['tire:import'].invoke 
    @user = User.find_by_type('System') 
    User.tire.index.remove @user 
    end 
end