У меня есть данные вasticsearch.
это мой фактический документ https://docs.google.com/document/d/1DKID90I9ulUcut-S8UfrnSjY-3citEwmyfnJJmrIRU8/edit?usp=sharing
doc:
{
store_id:"abc",
event_timestamp:"2019-06-05 13:00:05",
event_type:"heartbeat"
}
У меня есть store_id, диапазон дат и тип события в файле input.in, мне нужно процентное количество времени, когда устройство было в сетина этот час.
Вот как мы считаем устройство онлайн.Если в течение часа для store_id происходит событие = "heartbeat", то мы говорим, что магазин онлайн.
пример 1.
, поэтому, если диапазон от «2019-05-07» до «2019-05-08» и есть 14 документов с разным часом, процент будет (14 / (2 * 24)) * 100
пример 2.
doc:
{
store_id:"abc",
event_timestamp:"2019-06-05 13:00:05",
event_type:"heartbeat"
}
doc:
{
store_id:"abc",
event_timestamp:"2019-06-05 14:00:05",
event_type:"heartbeat"
}
doc:
{
store_id:"abc",
event_timestamp:"2019-06-05 14:00:05",
event_type:"heartbeat"
}
, если input был store_id = "abc" и date_range = "2019-06-05" to "" 2019-06-05 "и event_type =" heartbeat ", тогда вывод будет (2 / (1 * 24)), потому что есть только два разных часа с событием = heartbeat этого хранилища.
это мой запрос длякумулятивная сумма. Если как-то Как я могу разделить итоговую кумулятивную сумму с разницей между датами.
GET /internship38/_search
{
"query":
{
"bool":
{
"must":
[
{
"match" :
{
"attributes.store_id" : "41b15888-0c2f-48f9-89d0-dc7aad19f52b"
}
},
{
"match":
{
"event_type":"app_sent_heartbeat"
}
}
]
}
},
"aggs":
{
"my_date_histo":{
"date_histogram":{
"field":"arrival_timestamp",
"interval":"day"
},
"aggs":
{
"distinct_hours": {
"cardinality": {
"script": {
"lang": "painless",
"source": "doc[params.date_field].value.hourOfDay;",
"params": {
"date_field": "arrival_timestamp"
}
}
}
},
"cumulative_hours": {
"cumulative_sum": {
"buckets_path": "distinct_hours"
}
}
}
}
}
}
Можно ли это сделать в Java? Например https://www.programcreek.com/java-api-examples/?api=org.elasticsearch.script.Script