2012-11-30 2 views
5

나는 타이어 및 탄성 검색을 사용하여 Rails App의 일부인 MongoMapper 모델에서 검색 기능을 제공합니다. 클래스 혼자 didn를 다시로드이미 데이터가 저장된 모델의 타이어/탄성 검색 매핑을 다시로드

config.cache_classes = true 

: 나는 (설정/환경/env_name.rb에서) 다음과 같은 구성을 사용하는 환경에 재배치 할 때이 모델에 대한 매핑이되고, 업데이트되지 않은 곳 난 그냥 문제를 우연히 발견 이 문제를 해결하는 것 같아요. 아마도 새로운 매핑이 기존 데이터와 호환되지 않을 수도 있습니다. 대신 다음을 수행해야했습니다.

MyModel.index.delete 
<restart the app or reload the class> 
MyModel.index.import MyModel.all 

나는 a)의 더 나은 방법이 있는지 궁금해했습니다. 내 모델 코드에 정의 된 최신 매핑이 각 배포 후에 elasticsearch에 의해 사용되고 있는지 확인하지만 b). 완전한 데이터 세트로 불필요한 인덱스를 다시 채우지 않아도 되나요?

일반적으로 Chef를 사용하여 배포하므로 너무 어려움없이 성공적으로 사용한 세 단계를 자동화 할 수 있습니다. 하지만 신축성이 뛰어나고 타이어 때문에 나는 두 가지를 오용하거나 불필요하게 어렵게 만들 가능성이 높다고 생각했습니다.

답변

5

커플을 시도 할 수 있습니다 :

  • 타이어는 클래스로드
  • 하지만 타이어 하지 시도를하지 올바른 매핑 인덱스를 만들려고 모델이 이미 존재할 때 색인을 생성하십시오.

그럼, 당신의 질문은 정말로 적절한 워크 플로우에 관한 것입니까? 응용 프로그램의 새 버전을 배포 할 때 어떤 종류의 백업에서 데이터베이스를 다시 채우지 않는 것과 같은 방법으로 인덱스를 다시 채워서는 안됩니다.

MyModel.tire.index.mappingMyModel.tire.mapping으로 비교하고 다른 경우 다시 채우는 등의 방법으로 모델의 현재 정의를 준수하는 인덱스 매핑을 자동으로 확인할 수 있으므로주의해야합니다.

개발자는 대개 매핑을 변경 한 시점을 알고 있으므로 데이터를 다시 색인화해야합니다. 인덱스 삭제 및 다시 채우기는 검색 중단 시간을 의미하며 대규모 응용 프로그램에는 적합하지 않습니다.

데이터를 가져올 때 my-index-2012-12과 같은 특정 인덱스 이름을 사용하고이 인덱스에 my-index 별칭을 지정하는 것이 더 효과적인 솔루션입니다. 그런 다음 인덱스를 자유롭게 다시 채울 수 있으며 작업이 끝나면 중단 시간없이 별칭을 바꿀 수 있습니다. 타이어는 이런 종류의 작업 흐름 (레이크 임포트 작업 등)에서 당신을 지원하기 위해 열심히 노력합니다.

+0

마지막 단락으로 인해 다소 혼란 스러웠습니다. 시내를 피하기 위해 별칭을 다른 인덱스에 어떻게 사용할 수 있는지 이해할 수 없습니다. 앞에서 설명한 시나리오에서 my-index-2012-12에 대해 내 인덱스에 대한 검색이 다시 인덱싱되는 동안 해당 검색이 실행되지 않습니까? – concept47

+0

감사합니다. 나는 이것을 올바른 것으로 표시 할 것이고, 나는 대안을 찾을 수 없다. 대답의 요약처럼 내 시나리오에서 데이터의 색인을 다시 생성해야하며이 시나리오에서 가동 중지 시간을 피하기 위해 elasticsearch 별칭을 사용할 수 있습니다.다음은 elasticsearch 별칭에 대한 자세한 정보가있는 링크입니다. http://www.elasticsearch.org/guide/reference/api/admin-indices-aliases.html 타이어 github 페이지가 이제이 링크와 색인 별칭에 대한 정보를 갖습니다. – willjthomas

+0

@ concept47 타이어 github 페이지 당 현재 : 새로운 색인으로 데이터 색인을 생성 할 수 있습니다 (그리고 가능한 한 별칭을 업데이트 할 수 있습니다). 따라서 기존 색인을 다시 만들지 않고 새 버전을 만든 다음 별칭을 바꿉니다. 내가 틀렸다면 나를 바로 잡으세요. – willjthomas

0
+1

refresh_interval은 인덱스의 데이터를 새로 고치는 빈도를 설정합니다. 그렇지 않습니까? 내가 가지고있는 문제는 인덱스 데이터를 저장하지 않고 업데이트하는 것입니다. – willjthomas