2016-11-03 9 views
1

"Accepted", "Released"또는 닫힌 상태의 모든 문서 수를 반환하는 다음 요청을 받았습니다. 내 경우탄성 검색 합계 버킷

{ 
    "size": 0, 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "query_string": { 
      "query": "*", 
      "analyze_wildcard": true 
      } 
     } 
     ], 
     "must_not": [] 
    } 
    }, 
    "aggs": { 
    "slices": { 
     "terms": { 
     "field": "status.raw", 
     "include": { 
      "pattern": "Accepted|Released|Closed" 
     } 
     } 
    } 
    } 
} 

응답은 다음과 같습니다

"buckets": [ 
     { 
      "key": "Closed", 
      "doc_count": 2216 
     }, 
     { 
      "key": "Accepted", 
      "doc_count": 8 
     }, 
     { 
      "key": "Released", 
      "doc_count": 6 
     } 
     ] 

가 지금은 하나의 필드에 그들 모두를 추가하고 싶습니다. 나는 파이프 라인 집계를 사용하여 시도조차 (분명히에만 멀티 버킷에서 작동) 다음 sum_bucket 노력이 좀 도와 수

"total":{ 
    "sum_bucket":{ 
     "buckets_path": "slices" 
    } 
} 

누구를? sum_bucket

{ 
    "size": 0, 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "query_string": { 
      "query": "*", 
      "analyze_wildcard": true 
      } 
     } 
     ], 
     "must_not": [] 
    } 
    }, 
    "aggs": { 
    "slices": { 
     "filters": { 
     "filters": { 
      "accepted": { 
      "term": { 
       "status.raw": "Accepted" 
      } 
      }, 
      "released": { 
      "term": { 
       "status.raw": "Released" 
      } 
      }, 
      "closed": { 
      "term": { 
       "status.raw": "Closed" 
      } 
      }, 
      "total": { 
      "terms": { 
       "status.raw": [ 
       "Accepted", 
       "Released", 
       "Closed" 
       ] 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+0

어쩌면 멍청한 질문 일지 모르지만 간단히'status.raw : (Accepted OR Released OR Closed)'를 쿼리 한 다음 단순히 총 히트 수를 확인하는 것이 어떨까요? – Val

+0

버킷이 분리되어 있어야합니다. 다음이 필요합니다. 마감 됨, 수락 됨, 출시 됨, 총액 –

답변

1

대신 filters aggregation를 사용하고 같은 당신이 필요로하는 모든 버킷을 정의하는 것입니다 value_count 하위 집계로 계산 후 사용하십시오. sum_bucket pipeline aggregation

{ 
    "aggs": { 
    "unique_status": { 
     "terms": { 
     "field": "status.raw", 
     "include": "Accepted|Released|Closed" 
     }, 
     "aggs": { 
     "count": { 
      "value_count": { 
      "field": "status.raw" 
      } 
     } 
     } 
    }, 
    "sum_status": { 
     "sum_bucket": { 
     "buckets_path": "unique_status>count" 
     } 
    } 
    }, 
    "size": 0 
} 
+0

실용적인 답변처럼 보입니다.이 점을 염두에두고 장기적으로 더 효과가있는 것을 보도록하겠습니다! 고맙습니다! –

+0

나는 이것을 뒷받침 할 통계가 없지만,이 버전은 모든 다른 'status.raw' 용어에서 실행해야하는 패턴 포함이있는 것보다 더 효율적이어야합니다. 아마 당신은 얼마나 많은 다른 용어들에 의존 할 것입니다. 귀하의 마일리지가 다를 수 있습니다. – Val

+0

음, 나는 속도면을 생각하지 않았지만 논리는 당신이 옳다는 것을 지시합니다. 용어로 나누는 법도 알고 계시나요? 나는 미해결 된 관련 질문을 아직도 가지고 있습니다. 만약 당신도 그 사람들을 한번 보시고 싶다면 감사 할 것입니다. –

2

하고 이미 존재 집계 :

"aggs": { 
    "slices": { 
     "terms": { 
     "field": "status.raw", 
     "include": { 
      "pattern": "Accepted|Released|Closed" 
     } 
     } 
    }, 
    "sum_total": { 
     "sum_bucket": { 
     "buckets_path": "slices._count" 
     } 
    } 
    } 
+0

고맙다, 그것이 나의 최초의 질문에 매우 가깝기 때문에 나는이 대답을 받아 들였다. 방금 내 양동이 경로에 ._count 놓친 :) –

0

당신은 추가 할 수 있습니다 내가 어떻게 할 것인지

+0

당신은 직접'_count' ;-)를 사용할 수 있습니다 –

+0

오, 예 :) – ChintanShah25