2015-01-05 6 views
3

I가 다음 두 문서와 하위 용어 집계와 문제 : 주조 : 나는 두 개의 필드를 기반으로 집계를 수행하려는ElasticSearch - 배열 필드

{ 
"title":"The Judge", 
"year":2014, 
"casting":[ 
    { 
    "name":"Robert Downey Jr.", 
    "category":"Producer", 
    }, 
    { 
    "name":"Robert Duvall", 
    "category":"Actor", 
    } 
] 
} 

:

{ 
"title":"The Avengers", 
"year":2012, 
"casting":[ 
    { 
    "name":"Robert Downey Jr.", 
    "category":"Actor", 
    }, 
    { 
    "name":"Chris Evans", 
    "category":"Actor", 
    } 
] 
} 

합니다. 이름과 cast.category.

casting.category 필드를 기반으로 한 또 다른 TermsAggregation 인 하위 집합과 함께 casting.name 필드를 기반으로하는 TermsAggregation을 시도했습니다.

문제는 "Chris Evans"항목의 경우 ElasticSearch가 모든 범주 (Actor, Producer)에 대한 버킷을 설정하는 반면 1 버킷 (Actor) 만 설정해야한다는 것입니다.

모든 casting.category occasion과 모든 casting.name occurences 사이에 직교 곱이있는 것으로 보입니다. 간단한 필드 (제목 또는 연도)에 문제가없는 반면 배열 필드 (캐스팅)에서는 이와 같이 작동합니다.

또한 중첩 된 집계를 사용하려고했지만 적절하지 않을 수 있으며 ElasticSearch는 casting.category가 중첩 된 필드가 아니라는 오류를 발생시킵니다.

여기에 어떤 아이디어가 있습니까?

답변

2
Elasticsearch가 중첩 된 객체를 평평하게됩니다

, 그래서 내부적으로 당신은 얻을 것이다 :

{ 
"title":"The Judge", 
"year":2014, 
"casting.name": ["Robert Downey Jr.","Robert Duvall"], 
"casting.category": ["Producer", "Actor"] 
} 

당신이 관계를 유지하려면 당신도 nested objects 또는 parent child relationship

중첩을 위해 사용해야합니다 매핑하면 다음과 같은 작업을 수행해야합니다.

"mappings": { 
    "movies": { 
     "properties": { 
     "title" : { "type": "string" }, 
     "year" : { "type": "integer" }, 
     "casting": { 
      "type": "nested", 
      "properties": { 
      "name": { "type": "string" }, 
      "category": { "type": "string" } 
      } 
     } 
     } 
    } 
    } 
+0

괜찮습니다. 설명해 주셔서 감사합니다. – julien

+0

그게 도움이 될 수있어서 기뻐. 대답을 수락 할 수 있습니까? –

관련 문제