2016-11-03 12 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

Mmmmm、スピードの面は考えていませんでしたが、ロジックが正しいと指示しています。あなたはたぶん用語で分ける方法も知っていますか?私はいくつかの未解決のエスケープ関連の質問がまだ開いているので、あなたもそれらを見てみたいと思っていると私はこれまで感謝するだろう。 –

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