This makes more sense as a query.  What about putting the range modified_on query from above into a filter?  It can be exactly the same, just in the `query["filter"]["and"]` list.  Then you can optionally add a query argument here for the case search.
Also, since you're looking for partial matches, you shouldn't use `"name.exact"`.  You can search the `"name"` field, and take advantage of elasticsearch's analyzer and tokenization. 
You might want to look at a [prefix query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-prefix-query.html) (`query["query"] = {"prefix": {"name": case_search}}`) or a [wildcard query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html) if you need to return more than just prefix matches (`query["query"] = {"wildcard": {"name": "*%s*" % case_search}}`).