2014-11-21 10 views
0

Elasticsearch의 용어 집계 자 수 사이에 pourcentile을 계산하고 싶습니다.Elasticsearch의 하위 용어 어 그리 게이터의 데이터가있는 스크립트

내 쿼리 :

{ 
    "query" : { 
     "match_all" : {} 
    }, 
    "size" : 0, 
    "aggs": { 
     "eventName" : { 
      "terms" : { "field" : "json.eventName" } 
     } 
    } 
} 

결과 애그리 게이터 (aggregator) :

"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 
      } 
     ] 
    } 
} 

내가 "용어 1"과 "term4"사이의 통계 exemple 원하는 : 56 %

+0

내 문제는 아십니까? –

답변

0

나는 scripted_metric이 도움이 될 것 같아요.

내 대답을 다른 this 질문에 대한보십시오.

두 경우를 모두 고려한 다음 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;" 

이것은 당신이 사전에 용어 (이벤트 이름)을 알고 있다고 가정합니다. 또한 관련 이벤트를 필터링 할 수 있습니다.

희망이 도움이됩니다.