2012-11-07 2 views
1

나는 멀티 테넌트 (multi-tenant) 앱을 위해 tiregem을 통해 elasticsearch를 사용하려고합니다. 앱에 많은 사용자가있는 계정이 많은 계정이 있습니다.타이어를 통해 elasticsearch의 라우팅 필드

사용자 모델 :

include Tire::Model::Search 
    mapping do 
    indexes :name, :boost => 10 
    indexes :account_id 
    indexes :company_name 
    end 

    def to_indexed_json 
    to_json(:only => [:name, :account_id, :company_name], 
     ) 
    end 

나는 ACCOUNT_ID을 기반으로 라우팅을 추가하고 싶습니다. 이것이 어떻게 달성 될 수 있도록 도와주십시오. 라우팅을 지정하는 두 가지 방법이 있음을 알았습니다. 별명

내가 첫 번째 옵션에 관심을 사용하여 라우팅 필드

  • 를 사용하여 매핑 동안

    1. . _routing은 매핑 섹션에 해시로 추가 될 수 있습니다.

      mapping :_routing => { :required => true, :path => :account_id } do 
          indexes :name, :boost => 10 
          indexes :account_id 
          indexes :company_name 
          end 
      

      검색 쿼리 :

      User.tire.search do 
          query do 
           filtered do 
            query { string('[email protected]') }, 
            filter :term, :account_id => 2 
           end 
          end 
          end 
      

      우리가 검색 쿼리에서 아무것도 지정해야합니까? 위에서 지정한대로 매핑을 지정하면 색인 생성이 발생하지 않습니다 (라우팅 사용). 라우팅 없이는 정상적으로 작동합니다.

  • 답변

    0

    경로로 account_id를 추가하면 하나의 샤드에 동일한 계정 데이터를 모두 축적하는 데 도움이됩니다.

    검색 쿼리에 라우팅을 사용하여 각 샤드마다 검색어 이 발생하지 않도록하는 것이 좋습니다.

    매핑이 제대로 설정되었는지 확인하려면 Get Mapping API을 사용하십시오.