3 different times response

Hi, I'm querying my database whit ES 2.3.1 and I've been measuring the times responses, but I got three different times.
First I measure the time of the first query on database. It takes about 9 seconds.
The second time I measure, I closed the ES, cleared the RAM and cache and query again. It takes about 1,2 seconds.
The third time I query without cleaning caches and it takes 97 ms.
Can anyone explain way it happens?
The last measure I know that its faster because the data already queried is on cache. I think the first time takes more time because the data have to be pulled on cache.
For me when I clear the cache and RAM the time of the second measuring had to be equal the first measure, but no. Can someone explain me way?

I suspect the first difference is due to the filesystem cache. Since the query had to read exactly the same information from disk, everything was hot already.

The second is less clear to me but I suspect this is due to the fact that some parts of the index are loaded lazily (like fielddata, norms or doc values), plus the fact that the previous query might have loaded data eg. in the query cache.