2017-12-16 1 views
0

이 질문을 어떻게 구성해야할지 모르겠으므로 예제로 들어가 보겠습니다. 나는 다음과 같은 문서가 한 가정 :형제를 모아 놓은 중첩 된 용어 집계

elements 중첩 된 문서를 포함
{ 
    elements: [ 
     {name: 'foo'}, 
     {name: 'bar'}, 
     {name: 'baz'} 
    ] 
}, 
{ 
    elements: [ 
     {name: 'foo'}, 
     {name: 'baz'} 
    ] 
} 

. 모든 name 이상을 집계하여 형제가 해당 요소와 함께 나타나는 횟수를 계산할 수 있기를 원합니다.

e.e.

{ 
    foo: { 
     bar: 1, 
     baz: 2 
    }, 
    bar: { 
     foo: 1, 
     baz: 1 
    }, 
    baz: { 
     foo: 2, 
     bar: 1 
    } 
} 

elasticsearch 집계를 사용하여 깔끔한 방법이 있습니까? ES에서의 집계에 대한 나의 원시적 인 이해는 다음과 같은 일을했다.

"aggs": { 
    "elements": { 
     "nested": { 
      "path": "elements" 
     }, 
     "aggs": { 
      "names": { 
       "terms": { 
        "field": "elements.name", 
        "size": 20 
       }, 
       "aggs": { 
        "more_elements": { 
         "terms": { 
          "field": "elements.name", 
          "size": 20 
         } 
        } 
       } 
      } 
     } 
    } 
} 

이것은 완전히 잘못된 결과를 가져온다. 나는 다음과 같은 것을 얻는다 :

{ 
    foo: { 
     doc_count: 2, 
     foo: 2 
    }, 
    bar: { 
     doc_count: 1, 
     foo: 1 
    }, 
    baz: { 
     doc_count: 2, 
     foo: 2 
    } 
} 

어떤 도움을 많이받습니다! 중요한 경우 현재 ES 5.4를 사용 중입니다.

답변

0

한 번에 수행 할 방법을 찾을 수 없습니다.

1 단계 : 나는 두 단계로 분리 할 수 ​​있습니다

{ 
    "size": 0, 
    "aggs": { 
    "elements": { 
     "nested": { 
     "path": "elements" 
     }, 
     "aggs": { 
     "names": { 
      "terms": { 
      "field": "elements.name", 
      "size": 20 
      } 
     } 
     } 
    } 
    } 
} 

2 단계 : 모든 elements.names 찾아 각 element.name을 위해 할 :

{ 
    "size": 0, 
    "aggs": { 
    "bool_agg": { 
     "filter": { 
     "bool": { 
      "must": { 
      "term": { 
       "elements.name": "NAME_HERE" 
      } 
      } 
     }, 
     "aggs": { 
      "names": { 
      "terms": { 
       "field": "elements.name", 
       "size": 20 
      } 
      } 
     } 
     } 
    } 
    } 
} 

에주의를 그 여기에 중첩 된 집계를 사용하지 않습니다. filter aggregation은 현재 이름을 포함하는 모든 (전체) 문서를 필터링합니다. 모든 형제 자매의 출현 번호를 얻는 것보다 (또한 현재 이름도 삭제할 수 있지만).

관련 문제