Скрипт с данными агрегаторов подслов в Elasticsearch
Я хотел бы рассчитать pourcentile между количеством агрегаторов терминов в Elasticsearch.
Мой запрос:
{
"query" : {
"match_all" : {}
},
"size" : 0,
"aggs": {
"eventName" : {
"terms" : { "field" : "json.eventName" }
}
}
}
Агрегатор результатов:
"aggregations": {
"eventName": {
"doc_count_error_upper_bound": 0,
"buckets": [
{
"key": "term1",
"doc_count": 30235
},
{
"key": "term2",
"doc_count": 30216
},
{
"key": "term3",
"doc_count": 22177
},
{
"key": "term4",
"doc_count": 17173
}
]
}
}
Я хочу этот пример метрики между "term1" и "term4": 56%
1 ответ
Я думаю scripted_metric
мог бы помочь.
Посмотрите на мой ответ для другого этого вопроса.
В вашем случае вы можете сосчитать два условия и затем вернуть term4Cnt / term1Cnt. Грубая оценка того, что вам нужно:
"init_script": "_agg.term1Cnt = 0; _agg.term4Cnt = 0;",
"map_script": "if (doc.json.eventName == "term1") {
_agg.term1Cnt += 1;
} else if (doc.json.eventName == "term4") {
_agg.term4Cnt += 1;",
}"
"reduce_script": "term1Cnt = 0; term4Cnt = 0;
for (agg in _aggs) {
term1Cnt += agg.term1Cnt;
term4Cnt += agg.term4Cnt;
};
return term4Cnt / term4Cnt;"
Это предполагает, что вы заранее знаете свои условия (название мероприятия). Вы также можете фильтровать по соответствующим событиям.
Надеется, что это помогает.