Well, in your case you search through 246 shards, so either you have a) all of them on a single node, which would mean that the probably less than 246 cores on that node need to service all of these shards, or b) a cluster with multiple nodes.
In both cases, you will experience some variance in the responses you get due to different search queries, varying network latency, other processes fighting for resources (e.g. CPU), cache hits/misses, traffic from other users on the cluster, OS memory management, JVM garbage collection, ... the list is rather long and this kind of behavior is totally normal for a distributed system doing what Elasticsearch does.
If you have to maintain the system, go and define some SLAs that you want to adhere to. Then monitor those and as long as you are below that - don't worry. There are some options that you could look into, like tuning memory, thread pools, GC and cache settings, ... the list is rather long as well, but all of that requires that you first come up with an expectation on the behavior of your system, aka SLAs.