cdietschrun cdietschrun - 1 month ago 17
Javascript Question

How to get a count for each type of an index in elasticsearch?

I have an index and want to get a count for the entries in every type of one particular index in elasticsearch, but might not know the types ahead of time.

So, for example, the index is

/events


and the types could be

/events/type1
/events/type2
...
/events/typeN


And I'd like to query the index and say "Give me the count of each of the types under index events", so maybe a result set like

/events/type1 : 40
/events/type2: 20
/events/typeN: 10


where /events/_count would give me

/events: 70


Edit:

imotov's answer is great. I'm having trouble figuring how to get it working in JavaScript/Ajax easily though. I have something like this right now:

$.ajax({
type: 'GET',
url: 'http://localhost:9200/events/_search?search_type=count',
data: '{ "facets" : { "count_by_type" : { "terms" : { "field": "_type" }}}}',
success: function(text) {
console.log(text);
}
)}'


But am only getting the total count of elements in the ES, the facets portion of the answer seems to be missing.

Answer

You can use terms aggregations on the _type field to get this information:

curl "localhost:9200/test-idx/_search?search_type=count" -d '{
    "aggs": {
        "count_by_type": {
            "terms": {
                "field": "_type"
            }
        }
    }
}'