When a query doesn’t require faceting, the engine is optimized to return early when enough "best" hits have been retrieved (more than 10,000 hits with perfect match and perfect proximity).
In that case the index is not scanned entirely so
exhaustiveNbHits is set to false and
nbHits is estimated.
When faceting is required, the entire index has to be scanned in order to be able to count facets, so
exhaustiveNbHits is true.