2017-02-07 5 views
0

境界値を応答に含めようとしていますが、間隔に応じて常に最も近い終了時刻に丸めます。 例えば、10:20〜10:42のデータを5分間隔で尋ねると、境界値タイムスタンプを含めるエラスティック検索

のデータが返されます。

10:20 - 10:25 - 10:30 - 10:30 - 10:35 - 10:40しかし、最後の10:40-1:42は返されません。どうすればいいですか?ここでは、クエリとレスポンスがあります。

クエリ

{ 
    "query": { 
     "filtered": { 
      "filter": { 
       "bool": { 
        "must": [{ 
         "range": { 
          "timestamp": { 
           "gte": 1486443000000, 
           "lte": 1486446240000 
          } 
         } 
        }, { 
         "term": { 
          "applicationId": "******" 
         } 
        }, { 
         "term": { 
          "hostId": "*******" 
         } 
        }] 
       } 
      } 
     } 
    }, 
    "filter": { 
     "limit": { 
      "value": 0 
     } 
    }, 
    "aggs": { 
     "time": { 
      "histogram": { 
       "field": "timestamp", 
       "interval": 300000, 
       "min_doc_count": 0, 
       "extended_bounds": { 
        "min": 1486443000000 , 
        "max": 1486446240000 
       } 
      }, 
      "aggs": { 
       "establishedConnections": { 
        "sum": { 
         "field": "establishedConnections" 
        } 
       } 
      } 
     } 
    }, 
    "sort": { 
     "timestamp": { 
      "order": "desc" 
     } 
    } 
} 

応答

{ 
    "took": 8, 
    "timed_out": false, 
    "_shards": { 
     "total": 21, 
     "successful": 21, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 0, 
     "max_score": null, 
     "hits": [] 
    }, 
    "aggregations": { 
     "time": { 
     "buckets": [ 
      { 
      "key_as_string": "2017-02-07T04:50:00.000Z", 
      "key": 1486443000000, 
      "doc_count": 50, 
      "establishedConnections": { 
       "value": 13 
      } 
      }, 
      { 
      "key_as_string": "2017-02-07T04:55:00.000Z", 
      "key": 1486443300000, 
      "doc_count": 50, 
      "establishedConnections": { 
       "value": 20 
      } 
      }, 
      { 
      "key_as_string": "2017-02-07T05:00:00.000Z", 
      "key": 1486443600000, 
      "doc_count": 50, 
      "establishedConnections": { 
       "value": 7 
      } 
      }, 
      { 
      "key_as_string": "2017-02-07T05:05:00.000Z", 
      "key": 1486443900000, 
      "doc_count": 50, 
      "establishedConnections": { 
       "value": 14 
      } 
      }, 
      { 
      "key_as_string": "2017-02-07T05:10:00.000Z", 
      "key": 1486444200000, 
      "doc_count": 50, 
      "establishedConnections": { 
       "value": 13 
      } 
      }, 
      { 
      "key_as_string": "2017-02-07T05:15:00.000Z", 
      "key": 1486444500000, 
      "doc_count": 50, 
      "establishedConnections": { 
       "value": 12 
      } 
      }, 
      { 
      "key_as_string": "2017-02-07T05:20:00.000Z", 
      "key": 1486444800000, 
      "doc_count": 50, 
      "establishedConnections": { 
       "value": 9 
      } 
      }, 
      { 
      "key_as_string": "2017-02-07T05:25:00.000Z", 
      "key": 1486445100000, 
      "doc_count": 50, 
      "establishedConnections": { 
       "value": 14 
      } 
      }, 
      { 
      "key_as_string": "2017-02-07T05:30:00.000Z", 
      "key": 1486445400000, 
      "doc_count": 50, 
      "establishedConnections": { 
       "value": 19 
      } 
      }, 
      { 
      "key_as_string": "2017-02-07T05:35:00.000Z", 
      "key": 1486445700000, 
      "doc_count": 50, 
      "establishedConnections": { 
       "value": 13 
      } 
      }, 
      { 
      "key_as_string": "2017-02-07T05:40:00.000Z", 
      "key": 1486446000000, 
      "doc_count": 40, 
      "establishedConnections": { 
       "value": 8 
      } 
      } 
     ] 
     } 
    } 
    } 
+0

ここでは10:42の値を使用していますか? – Mysterion

+0

はい私はこのポイントのデータを持っています。もし私が10:45までクエリすると、レスポンスが返されます。 –

+0

あなたの現在のレスポンスはヒットエリアに何も表示されないので、 – Mysterion

答えて

0

事は、クエリ内の集計の一部では、あなたがこのために尋ねたことを、次のとおりです。

"aggs": { 
     "time": { 
      "histogram": { 
       "field": "timestamp", 
       "interval": 300000, 
       "min_doc_count": 0, 
       "extended_bounds": { 
        "min": 1486443000000 , 
        "max": 1486446240000 
       } 
      }, 
      "aggs": { 
       "establishedConnections": { 
        "sum": { 
         "field": "establishedConnections" 
        } 
       } 
      } 
     } 
    } 

interval値で、あなたはをミリ秒で指定しましたecondsは正確に5分であるため、10:42の最後の間隔は破棄され、この間隔のすべての文書はキー10:40の下に置かれます。これは、より正式なようにするに

集約を実行すると、すべての文書の時間フィールドが評価され、その最も近いバケットに切り捨てられます。

bucket_key = Math.floor((value - offset)/interval) * interval + offset 
+0

これは私がすでに知っている、私が知る必要があるのは、残った値を含めるようにクエリで行うべきことです。 –

+0

@MiteshPant、境界を広げる、間隔を減らす、それはユースケースに依存します – Mysterion

関連する問題