Elasticsearch - Toplama Verileri
Bir toplama işi, bir dizin deseni tarafından belirtilen dizinlerden gelen verileri özetleyen ve yeni bir dizine yuvarlayan periyodik bir görevdir. Aşağıdaki örnekte, farklı tarih zaman damgalarına sahip sensör adında bir dizin oluşturuyoruz. Ardından, cron işi kullanarak bu endekslerdeki verileri periyodik olarak toplamak için bir toplama işi oluşturuyoruz.
PUT /sensor/_doc/1
{
"timestamp": 1516729294000,
"temperature": 200,
"voltage": 5.2,
"node": "a"
}
Yukarıdaki kodu çalıştırdığımızda şu sonucu alıyoruz -
{
"_index" : "sensor",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
Şimdi, diğer belgeler için de ikinci bir belge ekleyin.
PUT /sensor-2018-01-01/_doc/2
{
"timestamp": 1413729294000,
"temperature": 201,
"voltage": 5.9,
"node": "a"
}
Bir Toplama İşi Oluşturun
PUT _rollup/job/sensor
{
"index_pattern": "sensor-*",
"rollup_index": "sensor_rollup",
"cron": "*/30 * * * * ?",
"page_size" :1000,
"groups" : {
"date_histogram": {
"field": "timestamp",
"interval": "60m"
},
"terms": {
"fields": ["node"]
}
},
"metrics": [
{
"field": "temperature",
"metrics": ["min", "max", "sum"]
},
{
"field": "voltage",
"metrics": ["avg"]
}
]
}
Cron parametresi, işin ne zaman ve ne sıklıkla etkinleştirileceğini kontrol eder. Bir toplama işinin cron programı tetiklendiğinde, son etkinleştirmeden sonra kaldığı yerden yuvarlanmaya başlayacaktır.
İş çalıştıktan ve bazı verileri işledikten sonra, biraz arama yapmak için DSL Sorgusunu kullanabiliriz.
GET /sensor_rollup/_rollup_search
{
"size": 0,
"aggregations": {
"max_temperature": {
"max": {
"field": "temperature"
}
}
}
}