Need help with query performance issue

Testing out a POC using ElasticSearch to speed up one of our heavy SQL queries. I've got a single index with 150M docs. We've got about 18 fields. We've got a couple of int fields, but all the string fields are defined as:

          "streetName":
          {
              "type":"string",
              "analyzer":"uppercaseAnalyzer"
          },

and uppercaseAnalyzer is defined as:

  "analyzer": {
    "uppercaseAnalyzer": {
      "tokenizer": "keyword",
      "filter":  [ "uppercase" ]
    }

I'm searching on various address components (house number, street name, city, etc) using:

			ISearchResponse<MyObj> results = elastic.Search<MyObj>(s => s
				.Query(q => q
					.ConstantScore(cs => cs
						.Filter(ff => ff
							.Bool(b => b.Must(lst.ToArray())))))

lst is a list of the address components the user specifies. I.e. zip, street name, etc.

lst.Add(Query.Term(t => t.Field(f => f.streetName).Value(arr2[4])));

etc. The index on the disk ends up being about 40GB and I'm currently hosting on a test machine with 18GB RAM and after 4 or 5 runs, the index / cache gets really hot and I find addresses really well. Pretty much every run gets faster and faster. java.exe grows to about 10 or 11GB.

Another type of search we're doing is across field "f1".."f7". They are defined the same as street name above and in the same index / doc, but they're just random identifiers like "1234-5678", "000012345678". For this type of search, I'm using a filtered query_string query and add f1..f7 to the fields. I'm noticing that this search isn't heating up the index & cache and java.exe only grows to about 5GB and never really gets as fast as the plain address search which has multiple bools vs a single query string.

How come the 2nd search isn't working as well and heating up the cache?