5

order을 나타내는 Elasticsearch의 부모 - 자식 구조가있는 자식이 order_revision 인 경우 quantity의 합계를 나타내는 price의 막대 그래프를 생성하려고합니다.탄성 검색 집계 : 부모 당 최신 자녀 수의 합계

{ 
    "_type": "order", 
    "_id": "1063220887", 
    "_score": 1, 
    "_source": { 
    "order_id": "1063220887", 
    "product_id": "10446350", 
    "timestamp": 1462713302000 
    } 
} 

{ 
    "_type": "order_revision", 
    "_id": "10234234", 
    "_parent": "1063220887", 
    "_source": { 
    "price": 9, 
    "quantity": 3, 
    "revision": 361, 
    "timestamp": 1462712196000 
    } 
} 

다음 집계는 기본적으로 작동하지만 기존 수정 버전의 합계를 반환합니다.

{ 
    "aggs": { 
     "orders": { 
     "filter": { 
      "has_parent": { 
      "parent_type": "order" 
      } 
     }, 
     "aggs": { 
      "quantity_per_price": { 
      "histogram": { 
       "field": "price", 
       "interval": 1 
      } 
      "aggs": { 
       "sum": {"field": quantity"} 
      } 
      } 
     } 
     } 
    } 
    } 

최종 버전 만 모든 주문의 (/ 최신 timestamp 가장 높은 사용) 최신 개정을위한 quantity 필드의 합계를 반환해야합니다. order_id으로 그룹화하는 집계 방법을 알아 내고 최신 자식 만 선택하는 방법에 대해 확신하지는 못합니다.이 부모 - 자식 구조가이 데이터를 모델링하는 데 가장 적합한 지 확실하지 않습니다.

+0

대략 주문 당 몇 개정이 있습니까? 우리는 10-20 +와 같이 1-2 이상의 크기로 말하고 있습니까? – Val

+0

약 10 .... –

답변

0

가장 쉬운 구현은 최신 개정판에 문서에 ("latest": true)라는 태그가 붙는 것입니다. 그런 다음 쿼리 또는 filter 집계를 추가하여 최신 수정본 만 필터링하는 간단한 문제가됩니다.

+0

새 개정이 들어 오면 이전 최신 개정을''latest ": false'로 갱신해야 함을주의하십시오. – Val

+0

당신의 재배 주셔서 감사합니다. .. 최신의 것을 표시하는 것이 더할 나위없이 더할 나위없이 나는 또한이 시간을 되돌릴 수있는이 기능을 확장 할 필요가 없다라고하는 질문에 언급하지 않았다. .. 그러나 나는 이것을 생각하지 않는다 ES로 정말 가능합니다. 그래서 아무것도 들어오지 않으면 답을 받아 들일 것입니다 ... –