3

Я написал некоторый запрос aggs, чтобы получить общее количество (сумма) и уникальный счет. , но результат немного смущен.отличное количество больше, чем doc_count в elasticsearch aggs

уникальное значение больше, чем doc_count.
Возможно ли это?

Я знаю, что агрегирование мощности является экспериментальным и может получить приблизительный подсчет различных значений.
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html

но слишком плохой результат. , как вы можете видеть, есть много ведер, которые уникальны больше, чем doc_count.
любая проблема с форматом запроса? или мощности?

полумиллиона документов индексируются
и есть 15 типа EventID
ES 1.4 использования.

запрос

{ 
"size": 0, 
"_source": false, 
"aggs": { 
    "eventIds": { 
     "terms": { 
      "field": "_EventID_", 
      "size": 0 
     }, 
     "aggs": { 
      "unique": { 
       "cardinality": { 
        "field": "UUID" 
       } 
      } 
     } 
    } 
} 

ответ

{ 
"took": 383, 
"timed_out": false, 
"_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
}, 
"hits": { 
    "total": 550971, 
    "max_score": 0, 
    "hits": [ 

    ] 
}, 
"aggregations": { 
    "eventIds": { 
     "doc_count_error_upper_bound": 0, 
     "sum_other_doc_count": 0, 
     "buckets": [ 
      { 
       "key": "red", 
       "doc_count": 165110, 
       "unique": { 
        "value": 27423 
       } 
      }, 
      { 
       "key": "blue", 
       "doc_count": 108376, 
       "unique": { 
        "value": 94775 
       } 
      }, 
      { 
       "key": "yellow", 
       "doc_count": 78919, 
       "unique": { 
        "value": 70094 
       } 
      }, 
      { 
       "key": "green", 
       "doc_count": 60580, 
       "unique": { 
        "value": 78945 
       } 
      }, 
      { 
       "key": "black", 
       "doc_count": 49923, 
       "unique": { 
        "value": 56200 
       } 
      }, 
      { 
       "key": "white", 
       "doc_count": 38744, 
       "unique": { 
        "value": 45229 
       } 
      }, 

EDIT. more test

Я попробовал еще раз с 1000 точностью_порога, который отфильтровывается только один eventId
, но ошибка результата такая же. мощность ожидается менее 30000, но его более чем 66000 (это больше, чем общий размер документа)

doc_count: (. Не проблема справа) 65672 мощность: 66037 (больше doc_count) фактической мощности: около 23 000 (в пересчете на РСУБД скрипты ...)

запрос

{ 
"size": 0, 
"_source": false, 
"query": { 
    "term": { 
     "_EventID_": "packdownload" 
    } 
}, 
"aggs": { 
    "unique": { 
     "cardinality": { 
      "field": "UUID", 
      "precision_threshold": 10000 
     } 
    } 
} 

}

ответ

{ 
"took": 28, 
"timed_out": false, 
"_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
}, 
"hits": { 
    "total": 65672, 
    "max_score": 0, 
    "hits": [] 
}, 
"aggregations": { 
    "unique": { 
     "value": 66037 
    } 
} 

}

+0

Попробуйте с '" precision_threshold ": 1000' и ​​посмотрите, какие результаты вы вернетесь. Если вы посмотрите на графику, показывающую относительную ошибку в ссылке, которую вы указали, вы видите довольно большую ошибку для низкого порога. –

+0

@ Аndrei Я понятия не имею, что такое «графический показ», о котором вы говорили. :( –

+0

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html#_counts_are_approximate там есть граф. Вы пробовали с точностью 1000? –

ответ

1

Наибольшее значение для точного порога 40000. Это должно слегка улучшить результаты, но с таким большим количеством разных значений может быть ошибка 20% плюс минус. Это происходит даже при меньших значениях.

+0

Из [docs] (https://www.elastic.co/guide/en/elasticsearch/guide/current/cardinality.html): «Практически говоря, порог 100 поддерживает ошибку до 5%, даже когда считая миллионы уникальных ценностей ». –