2012-06-25 5 views
0

업데이트 : 내가 뭘 하려는지 다시 정의했습니다.탄성 검색의 독립 인덱스

연락처 모델이 있습니다.이 연락처는 계정의 다른 모든 모델과 마찬가지로 계정에 속합니다. 글로벌 계정이든 모델이든 포함 된 계정 만 쿼리하면 모든 검색이 필요합니다. 사용자 정의 색인 이름으로이 작업을 수행 할 수 있다고 들었습니다. 색인 이름을 '색인 - # {account-id}'로하고 싶습니다. 활성 모델에서 어떻게 이것을 얻을 수 있습니까?

class Contact < ActiveRecord::Base 
    include Tire::Model::Search 
    include Tire::Model::Callbacks 

    belongs_to :account 

    mapping do 
    indexes :first_name 
    indexed :last_name 
    end  

end 

class Account < ActiveRecord::Base 
    has_many :contacts 
end 
+0

필드에 'firmid'라는 필드와 필터가있는'contact '를 정의 하시겠습니까? 그렇지 않으면 –

+0

에 대해 귀하가 무엇을 묻고 있는지 잘 모르겠습니까? –

답변

0

각각의 계정에서 각 계정 (사용자)을 물리적으로 분리하는 것을 참조하십니까? 이것은 일반적으로 '멀티 테넌트 (multi-tenant)'이 당신이 무엇을 밖으로 설정할 참 가정 http://en.wikipedia.org/wiki/Multitenancy

라고 :

는 많은

가 '필요'에 대해 과거에 말했다되었습니다 (난 당신이 원하는 가정 보안상의 이유로, 비록 멀티 테넌시 응용 프로그램의 전문가가 아니지만 사용자가 계정/사용자별로 데이터를 분할하지 않아도되는 이유에 대해 잘 알고 있지는 않습니다. Contact의 경우 accountid 적어도 귀하의 검색어는 모두 accountid으로 필터링해야합니다. 예를 들어 시스템에서 사용되는 모든 쿼리가 accountid을 설정하는 데 필요한 '수퍼 쿼리'를 상속받은 경우 신중하게 설계된 쿼리 구성 요소 인 IMO가 많은 경우에 충분합니다.

미래에 어떤 색인을 검색할지 미리 알지 못하는 경우에도 ES를 중심으로가는 REST 서비스를 사용하고 모든 프로그램이 이 서비스. 그런 다음이 서비스가 accountid을 적용하거나이 요청을 수행하는 현재 로그인 한 사용자가 accountid을 유추하여이 유형의 보안을 처리하게 할 수 있습니다.

여전히 멀티 입주를 원한다면 http://elasticsearch-users.115913.n3.nabble.com/Multi-tenacy-td471400.html (빨리 검색하면 좋을 것 같습니다.) 'Kimchy'(ES 창안자) 주석도 볼 수 있습니다.

멀티 테넌시를 보유한 ES의 가장 좋은 방법은 계정/사용자 당 1 개의 색인을 갖는 것입니다. 그 안에 여러 개의 '유형'(ES 구조)을 가질 수 있습니다. Contact은 그러한 유형이 될 수 있습니다.

http://www.elasticsearch.org/guide/reference/mapping/ http://www.elasticsearch.org/guide/reference/api/search/indices-types.html

당신이 제안하는대로, 아마 올바른 방법이 아니다, 당신의 모델이 시행 IMO. 일반적으로 저장소 백엔드에 대한 지식 (데이터가 저장된 인덱스 포함)으로부터 도메인 모델을 깨끗하게 유지해야합니다.

나에게 더 나은 해결책은 이전에 제안한 것처럼 쿼리 기반의 방법을 사용하는 것입니다. 구성 요소는 계정/사용자를 기반으로 올바른 색인을 선택하는 논리가 포함됩니다. 위의 rest-service 접근법과 함께, 당신이 제안한 dynamic indexname은 요청을하는 로그인 한 사용자로부터 파생 될 수 있습니다.

나는 이것이 아마도 당신의 질문에 대한 직접적인 대답은 아니지만, 그럼에도 불구하고 유용하다고 생각합니다.

+0

좋은 답변입니다. 나는 이것을 est 인터페이스로 직접 구현할 수있다. 그러나 ES와 통신하기 위해 '타이어'보석을 사용하고 있습니다. 나는 보석으로 그것을 할 약간의 직접적인 방법이 있기를 바라고 있었다. –

1

comment at Tire's issues을 확인하고 싶을 수도 있습니다. 이는 기본적으로 Tire에서 "임차인 기반"색인 이름 지정의 몇 가지 가능한 시나리오를 안내합니다. 나는 네가 겪은 일이라고 생각한다.

elasticsearch 자체에는 모든 계정에 대한 별도의 색인, 모든 계정에 대한 필터링 된 & 라우팅 된 색인 별칭, 색인 템플릿 등을 가질 수있는 옵션이 있으므로 툴킷은이 영역에서 광범위합니다.