Counting number of documents using Elasticsearch
If _search
must be used instead of _count
, and you're on Elasticsearch 7.0+, setting size: 0
and track_total_hits: true
will provide the same info as _count
GET my-index/_search
{
"query": { "term": { "field": { "value": "xyz" } } },
"size": 0,
"track_total_hits": true
}
{
"took" : 612,
"timed_out" : false,
"_shards" : {
"total" : 629,
"successful" : 629,
"skipped" : 524,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 29349466,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
}
}
See Elasticsearch 7.0 Breaking changes
Probably _count
is a bit faster since it doesn't have to execute a full query with ranking and result fetching and can simply return the size.
It would be interesting to know a bit more about how you manage to get different results though. For that I need more information like what exact queries you are sending and if any indexing is going on on the index.
But suppose that you do the following
- index some documents
- refresh the index
_search
and _count
(with a match all query) should return the same total. If not, that'd be very weird.