2012-02-28 4 views
2

이 질문의 잠재적 인 n00bness를 비방하십시오. 여전히이 비 관계형 NoSQL 관련 자료를 고민하고 있습니다.ElasticSearch 매핑 및 관련 객체

나는 ElasicSearch의 성능과 단순함에 깊은 인상을 받았지만, 구현에 너무 깊이 들어가기 전에 대답하기위한 매핑 (경계선 NoSQL theroy)에 대한 질문이 있습니다.

ElasticSearch의 설명서에 Twitter 예제가 계속 사용됩니다.

기본적으로 트윗은 사용자에게 속하며 사용자는 많은 트위트를 가지고 있습니다. 개체는 다음과 같이 보일 :

user = {'screen_name':'d2kagw', 'id_str':'1234567890', 'favourites_count':'15', ...} 
tweet = {'message':'lorem lipsum...', 'user_id_str':'1234567890', ...} 

내가, 트윗 개체가 사용자 개체에 대한 참조를 가질 수있다 궁금하네요? 내가 좋아하는 쿼리를 쓸 수 있기를 원하기 때문에 : 나는 (나중에 게으른 부하 그들에게 가진 대) 응답의 일부로 사용자 개체와 일치하는 트윗을 반환하고 싶은

{'query': { 
    'term':{'message':'lipsum'}, 
    'range':{'user.favourites_count':{'from':10, 'to':30'}} 
}} 

합니다.

내가 너무 많이 묻는가?

그런 식으로 데이터를 쿼리하려면 모든 사용자 데이터를 트윗 개체에 던져야합니까?

내 구현에서는 (트위터를 사용하지 않습니다.이 예제는 훌륭했습니다.) 데이터를 쿼리해야하는 다양한 방법으로 인해 두 개의 데이터 세트가 서로 다른 인덱스로 필요합니다. 개체 유형을 사용할 수 있으며 필요한 인덱스 구조를 사용할 수 있습니다.

미리 도움을 주셔서 감사합니다.

답변

2

ElasticSearch는 실제로 SQL 세계에서 익숙한 테이블 조인을 지원하지 않습니다. 가장 가까운 값은 Has Child Query입니다.이 테이블은 다른 테이블의 레코드를 기반으로 한 테이블에서 결과를 제한 할 수 있으며 여기에서도 일대 다 (부모 - 자식) 관계로 제한됩니다.

그래서이 세상에서 일반적인 접근법은 모든 것을 비정규 화하고 한 번에 하나의 색인을 쿼리하는 것입니다.

+0

비정규 화가 우리에게 가장 유망한 결과가 될 것으로 보입니다. – d2kagw

+0

d2kagw : 결국 무엇을 했습니까? 계정 데이터와 트윗을 저장하는 방법에 관해서도 똑같은 질문이 있습니다. –