2016-07-20 3 views
1

질문을 공식화하는 방법을 잘 모릅니다. 나는 Elasticsearch 2.2를 사용하고 있습니다. 탄성 검색 : 두 필드에 집계

은의 5 문서를 만든 데이터 세트의 예를 들어, 시작하자 :

[ 
    { 
    "header": { 
     "called_entity": { "uuid": "a" }, 
     "coverage_entity": {}, 
     "sucessful_transfers": 1 
    } 
    }, 
    { 
    "header": { 
     "called_entity": { "uuid": "a" }, 
     "coverage_entity": { "uuid": "b" }, 
     "sucessful_transfers": 1 
    } 
    }, 
    { 
    "header": { 
     "called_entity": { "uuid": "b" }, 
     "coverage_entity": { "uuid": "a" }, 
     "sucessful_transfers": 1 
    } 
    }, 
    { 
    "header": { 
     "called_entity": { "uuid": "b" }, 
     "coverage_entity": { "uuid": "a" }, 
     "sucessful_transfers": 0 
    } 
    } 
] 

called_entity 항상 UUID 있습니다. coverage_entity은 비어 있거나 uuid입니다.

는 내가 원하는 중 하나 또는 을 coverage_entity.uuid called_entity.uuid에 집계 한 다음 문서의 총량과 successful_transfers의 합을 계산하는 것입니다. 그래서,이 다섯 개 문서, 나는 결과로 그런 일을했을 :

uuid,doc_count,successful_transfers_count 
"a",4,3 
"b",3,2 

문제는이 같은 문서를 여러 집계에서 사용할 수있는 의미입니다 오래 집계 키에 하나 같이 called_entity.uuid 또는 coverage_entity.uuuid (가능한지 확실하지 않으므로 여기에 게시됩니다). 단순히 에 집계됩니다 내가 현재하고 있어요

필드를 called_entity.uuid하지만 충분하지 않습니다 물론 :

uuid,doc_count,successful_transfers_count 
"a",2,2 
"b",2,1 

:

{ 
    "size": 0, 
    "query": { 
    "match_all": {} 
    }, 
    "aggs": { 
    "dim_1": { 
     "terms": { 
     "field": "header.called_entity.uuid", 
     "size": 0 
     }, 
     "aggs": { 
     "successful_transfers": { 
      "sum": { 
      "field": "header.successful_transfers" 
      } 
     } 
     } 
    } 
    } 
} 

나에게 뭔가를 제공합니다. .. 내가 원하는 것이 아니야. 그렇다면 주어진 집계에 대해 여러 가지 값인 또는을 어떻게 집계 할 수 있습니까? 집계에있는 것뿐만 아니라 모든 문서에있는 값을 기반으로 데이터를 계산할 수 있습니까?

감사합니다.

답변

1
{ 
    "size": 0, 
    "query": { 
    "match_all": {} 
    }, 
    "aggs": { 
    "dim1": { 
     "terms": { 
     "script" : "return doc['header.called_entity.uuid'] + doc['header.coverage_entity.uuid']", 
     "size": 10 
     }, 
     "aggs": { 
     "successful_transfers": { 
      "sum": { 
      "field": "header.successful_transfers" 
      } 
     } 
     } 
    } 
    } 
} 
+0

... 젠장. 그것은 작동합니다. 정말 고맙습니다. 정확히 어떻게 작동하는지 설명해 주시겠습니까? – Raphael

+1

이 집합은 두 필드의 용어를 생성합니다 : 해당 스크립트를 사용하는'called_entity.uuid'와'coverage_entity.uuid'. 집계는 하나의 필드 만보고 있었고, 말했듯이 두 필드의 값이 동시에 필요합니다. –

+0

그래, 내부적으로 어떻게 작동하는지 알 것 같아. 고맙습니다. – Raphael