Скрипт с данными агрегаторов подслов в 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;"

Это предполагает, что вы заранее знаете свои условия (название мероприятия). Вы также можете фильтровать по соответствующим событиям.

Надеется, что это помогает.

Другие вопросы по тегам