2017-05-06 15 views
0

카디널리티 집계는 고유 값의 대략적인 수를 계산합니다. 그러나 단일 샤드에 저장된 인덱스의 경우에도 왜 잘못된 값을 표시합니까?ElasticSearch 카디널리티 문제

 

    GET /jobs/_settings 

    { 
     "jobs": { 
     "settings": { 
      "index": { 
      "number_of_shards": "1", 
    ... 


    position_id is long 

    GET /jobs/_search 
    { 
     "size": 0, 
     "aggs": { 
     "count_position_id": { 
      "value_count": { 
      "field": "position_id" 
      } 
     }, 
     "unique_position_id": { 
      "cardinality": { 
      "field": "position_id", 
      "precision_threshold": 40000 
      } 
     } 
     } 
    } 

    { 
     "took": 44, 
     "timed_out": false, 
     "_shards": { 
     "total": 1, 
     "successful": 1, 
     "failed": 0 
     }, 
     "hits": { 
     "total": 52836, 
     "max_score": 0, 
     "hits": [] 
     }, 
     "aggregations": { 
     "unique_position_id": { 
      "value": 52930 
     }, 
     "count_position_id": { 
      "value": 52836 
     } 
     } 
    } 

답변

1

그림의 단일 샤드보다 카디널리티를 계산하는 알고리즘과 관련이 있습니다.

ES의 카디널리티 AGG는 HLL은 (hyperloglog)의 대략적인 계산 알고리즘 인

당신은 정의 이것에 의해 낭포를 precision_threshold 증가시켜 정밀도를 제어 할 수 있습니다 (그것은 고유 한 값이 계산에 근접하는 해시의 이진 표현에 대한 관찰에 의존)를 사용하여 작동 "근사값"입니다.