# Scripting in cardinality aggregation

**URL:** <https://discuss.elastic.co/t/scripting-in-cardinality-aggregation/59722>\
**Category:** Elasticsearch\
**Created:** [September 3, 2016, 5:17am UTC](https://discuss.elastic.co/t/scripting-in-cardinality-aggregation/59722 "2016-09-03T05:17:21Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![BalaKumaran](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/balakumaran/32/18022_2.png) [@BalaKumaran](https://discuss.elastic.co/u/BalaKumaran)\
**Post date:** [September 3, 2016, 5:17am UTC](https://discuss.elastic.co/t/scripting-in-cardinality-aggregation/59722/1 "2016-09-03T05:17:21Z")

</div>

How does scripting in cardinality aggregation works. Is all values for the given field iterated and hashes for those are computed on the fly or is my assumption wrong? Can anyone explain exactly how scripting in cardinality works?

---

<div class="post-metadata">

**Author:** ![jimczi](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jimczi/32/47985_2.png) [@jimczi](https://discuss.elastic.co/u/jimczi)\
**Post date:** [September 5, 2016, 9:21am UTC](https://discuss.elastic.co/t/scripting-in-cardinality-aggregation/59722/2 "2016-09-05T09:21:52Z")

</div>

You can find the explanation here:  
[https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html#\_script\_2](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html#_script_2)

**Hashes are computed on the fly with a noticeable performance hit.**

---

<div class="post-metadata">

**Author:** ![BalaKumaran](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/balakumaran/32/18022_2.png) [@BalaKumaran](https://discuss.elastic.co/u/BalaKumaran)\
**Post date:** [September 6, 2016, 4:28am UTC](https://discuss.elastic.co/t/scripting-in-cardinality-aggregation/59722/3 "2016-09-06T04:28:02Z")

</div>

Hi jim,  
Thanks for your reply. I just cant understand one thing from that document. if i mention a field name in cardinality script, say for example

{  
"aggs" : {  
"author\_count" : {  
"cardinality" : {  
"script": "doc['author.first\_name'].value"  
}  
}  
}  
}

is all the values for the field "author.first\_name" is iterated once to compute the hashes and cardinality is calulated.

---

<div class="post-metadata">

**Author:** ![jimczi](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jimczi/32/47985_2.png) [@jimczi](https://discuss.elastic.co/u/jimczi)\
**Post date:** [September 6, 2016, 7:43am UTC](https://discuss.elastic.co/t/scripting-in-cardinality-aggregation/59722/4 "2016-09-06T07:43:52Z")

</div>

The cardinality for a field is the number of distinct values, if a document has more than one value for a field then each value is hashed and is added in the computation. For instance:  
doc1: foo, bar  
doc2: foo

.. has a cardinality of 2 (foo and bar).

---

<div class="post-metadata">

**Author:** ![BalaKumaran](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/balakumaran/32/18022_2.png) [@BalaKumaran](https://discuss.elastic.co/u/BalaKumaran)\
**Post date:** [September 6, 2016, 9:07am UTC](https://discuss.elastic.co/t/scripting-in-cardinality-aggregation/59722/5 "2016-09-06T09:07:08Z")

</div>

Hi Jim,

Consider a case

doc1 : foo  
doc2 : bar  
doc3 : foo  
doc4 : foo

In this case cardinality will be 2. my doubt is how many times hashes will be computed in cardinality scripting. will it be done 4 times in the above case.

---

<div class="post-metadata">

**Author:** ![jimczi](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jimczi/32/47985_2.png) [@jimczi](https://discuss.elastic.co/u/jimczi)\
**Post date:** [September 6, 2016, 9:08am UTC](https://discuss.elastic.co/t/scripting-in-cardinality-aggregation/59722/6 "2016-09-06T09:08:48Z")

</div>

Yes unless you use another field to precompute the hashes at indexing time:  
[https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html#\_pre\_computed\_hashes](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html#_pre_computed_hashes)

---

<div class="post-metadata">

**Author:** ![BalaKumaran](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/balakumaran/32/18022_2.png) [@BalaKumaran](https://discuss.elastic.co/u/BalaKumaran)\
**Post date:** [September 6, 2016, 9:10am UTC](https://discuss.elastic.co/t/scripting-in-cardinality-aggregation/59722/7 "2016-09-06T09:10:21Z")

</div>

Thanks Jim that makes it clear now

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 5, 2017, 10:22pm UTC](https://discuss.elastic.co/t/scripting-in-cardinality-aggregation/59722/8 "2017-07-05T22:22:20Z")

</div>


