elasticsearch1.1.1を使用する
すべてのアカウントについて、過去5分間の1秒あたりの「ページ」ビューのクエリを作成しようとしています(すべて一致します)。
マッピングは...
"xxx-20140526": {
"mappings": {
"xxx": {
"properties": {
"accountId": {
"type": "long"
},
"hitTime": {
"type": "date",
"format": "dateOptionalTime"
},
}
}
}
}
クエリ...
POST /xxx-20140526/xxx/_search
{
"filter": {
"range": {
"timeHit": {
"gte": "2014-05-26T13:40", //Date generated dynamically now - 5mins
"lt": "2014-05-26T13:45" //Date generated dynamically now
}
}
},
"aggs": {
"views_per_sec": {
"date_histogram": {
"field": "timeHit",
"interval": "second"
}
}
}
}
ただし、集計では以前の値も返されます...
"aggregations": {
"trx_per_sec": {
"buckets": [
{
"key_as_string": "2014-05-26T13:36:46.000Z",
"key": 1401111166000,
"doc_count": 72
},
... Other dates in the 30 mins range here...
{
"key_as_string": "2014-05-26T13:42:47.000Z",
"key": 1401111167000,
"doc_count": 5013
}
}
}
1-集計はフィルターを考慮しますか? 2-過去5分間をフィルタリングする正しい方法ですか、それとも日付の集計を確認する必要がありますか?
私も試しました...
{
"aggs": {
"range": {
"date_range": {
"field": "timeHit",
"format": "yyyy-MM-dd HH:mm:ss",
"ranges": [
{
"from": "now-5m"
}
]
}
}
}
}
しかし、これは適切な量のドキュメントを返さないようです。
さて、ここで動作するようにしたのはクエリです...
{
"size": 0, <--- Size zero. Don't return any docs we only care about the aggregation.
"aggs": {
"last_5_mins": {
"filter": {
"range": {
"hitTime": {
"gte": "now-5m",
"lte": "now"
}
}
},
"aggs": {
"tps": {
"date_histogram": {
"field": "hitTime",
"interval": "second"
}
}
}
}
}
}