2016-07-20 18 views
0

だが、私は以下のような弾性のドキュメントがたくさんあるとしましょう、私はデータを格納するために使用するネストされたマッピング:Elasticsearch:集計結果の後に

{ 
     "_index": "f2016-07-17", 
     "_type": "trkvjadsreqpxl.gif", 
     "_id": "AVX2N3dl5siG6SyfyIjb", 
     "_score": 1, 
     "_source": { 
      "time": "1468714676424", 
      "meta": { 
      "cb_id": 25681, 
      "mt_id": 649, 
      "c_id": 1592, 
      "revenue": 2.5, 
      "mt_name": "GMS-INAPP-EN-2.5", 
      "c_description": "COULL-INAPP-EN-2.5", 
      "domain": "wv.inner-active.mobi", 
      "master_domain": "649###wv.inner-active.mobi", 
      "child_domain": "1592###wv.inner-active.mobi", 
      "combo_domain": "25681###wv.inner-active.mobi", 
      "ip": "52.42.87.73" 
      } 
     }.... 
     } 

私の目的は、長期aggs'で、単純なヒストグラムの集約を行うことで、集計した結果を新しいインデックス/構造体に挿入し直します。

集計は次のとおりです。

{ 
    "aggs": { 
    "hour":{ 
     "date_histogram": { 
     "field": "time", 
     "interval": "hour" 
     }, 
     "aggs":{ 
      "hour_m_tag":{ 
       "terms":{ 
        "field":"meta.mt_id" 
       } 
      } 
     } 
    } 
    } 
} 

結果は予想通りである:

"aggregations": { 
    "hour": { 
     "buckets": [ 
     { 
      "key_as_string": "2016-07-17T00:00:00.000Z", 
      "key": 1468713600000, 
      "doc_count": 94411750, 
      "hourly_m_tag": { 
      "doc_count_error_upper_bound": 1485, 
      "sum_other_doc_count": 30731646, 
      "buckets": [ 
       { 
       "key": 10, 
       "doc_count": 10175501 
       }, 
       { 
       "key": 649, 
       "doc_count": 200000 
       }.... 
      ] 
      } 
     }, 
     { 
      "key_as_string": "2016-07-17T01:00:00.000Z", 
      "key": 1468717200000, 
      "doc_count": 68738743, 
      "hourly_m_tag": { 
      "doc_count_error_upper_bound": 2115, 
      "sum_other_doc_count": 22478590, 
      "buckets": [ 
       { 
       "key": 559, 
       "doc_count": 8307018 
       }, 
       { 
       "key": 649, 
       "doc_count" :100000 
       }... 

私の質問私は問題ありません結果を解析し、に戻ってそれを保存したい

新しいインデックス、

tを取得するために新しいインデックスで使用するネストされたマッピング彼は後でデータを集計した。

予想されるデータ構造:

{ 
    "hour": [ 
    { 
     "time": "00:00", 
     "child_tag": { 
     "300": 100, 
     "310": 200 
     }, 
     "master_tag": { 
     "1000": 300, 
     "1001": 400 
     "1010": 400 
     } 
    }, 
    { 
     "time": "01:00", 
     "child_tag": { 
     "300": 500, 
     "310": 600 
     }, 
     "master_tag": { 
     "1000": 700, 
     "1010": 800 
     } 
    } 

    ]... 
} 

P.S

集約後のmaster_tag/child_tagキーに合計を作る必要があります。時間の間。例えば

:00-01:00の間、クエリ00

{ 

     "child_tag": { 
     "300": 600,//100+500 
     "310": 800 //200+600 
     }, 
     "master_tag": { 
     "1000": 1000, //300+700 
     "1001": 400 
     "1010": 1200 //400+800 
     } 
    } 

どうもありがとう!

+0

その後、1つのドキュメントで完全な結果を取得する必要がありますか、1時間ごとに独自のドキュメントを作成する必要がありますか?また、 'child_id'要素と' master_id'要素の値を比較することによってそれらの文書を照会する必要がありますか、必ずしもそうではありませんか? – Val

答えて

0

あなたのコメントと編集によれば、1時間に1つのドキュメントを新しいインデックスに保存することをお勧めします。特定の時間に基づいてドキュメントを照会する方が簡単です。

次のように私が提案するマッピングは次のとおりです。

PUT /agg_index 
{ 
    "mappings": { 
    "my_type": { 
     "properties": { 
     "time": { 
      "type": "date", 
      "format": "HH:mm" 
     }, 
     "child_tag": { 
      "type": "nested" 
     }, 
     "master_tag": { 
      "type": "nested" 
     } 
     } 
    } 
    } 
} 

その後、あなたは、このようなインデックスは、あなたの新しいドキュメントことができます:

PUT /agg_index/doc/1 
{ 
    "time": "00:00", 
    "child_tag": { 
    "300": 100, 
    "310": 200 
    }, 
    "master_tag": { 
    "1000": 300, 
    "1001": 400, 
    "1010": 400 
    } 
} 

PUT /agg_index/doc/2 
{ 
    "time": "01:00", 
    "child_tag": { 
    "300": 500, 
    "310": 600 
    }, 
    "master_tag": { 
    "1000": 700, 
    "1010": 800 
    } 
} 

そして、あなたは上の文書および実行集計を照会することができますネストされたchild_tagおよびmaster_tag要素。

+0

夜間の仕事をしたいと思っています。後処理で毎時集計を行い、一度にすべてを保存します(あなたのインデックスマッピングの示唆によると...)それはいいですか? – VitalyT

+0

はい、必要に応じてすべてを別々のドキュメントとしてまとめて保存できますが、提案したとおりにすべての結果を1つのドキュメントに保存することはないので、クエリや集約が難しくなります。 – Val

関連する問題