title: Elasticsearch query_string combined with match_phrase
body: <p>I think it's best if I describe my intent and try to break it down to code.</p>
  
  <ol>
  <li>I want users to have the ability of complex queries should they choose to that <code>query_string</code> offers. For example 'AND' and 'OR' and '~', etc.</li>
  <li>I want to have fuzziness in effect, which has made me do things I feel dirty about like "#{query}~" to the sent to ES, in other words I am specifying fuzzy query on the user's behalf because we offer transliteration which could be difficult to get the exact spelling.</li>
  <li>At times, users search a number of words that are suppose to be in a phrase. <code>query_string</code> searches them individually and not as a phrase. For example 'he who will' should bring me the top match to be when those three words are in that order, then give me whatever later.</li>
  </ol>
  
  <p>Current query:</p>
  
  <pre><code>{
    "indices_boost": {},
    "aggregations": {
      "by_ayah_key": {
        "terms": {
          "field": "ayah.ayah_key",
          "size": 6236,
          "order": {
            "average_score": "desc"
          }
        },
        "aggregations": {
          "match": {
            "top_hits": {
              "highlight": {
                "fields": {
                  "text": {
                    "type": "fvh",
                    "matched_fields": [
                      "text.root",
                      "text.stem_clean",
                      "text.lemma_clean",
                      "text.stemmed",
                      "text"
                    ],
                    "number_of_fragments": 0
                  }
                },
                "tags_schema": "styled"
              },
              "sort": [
                {
                  "_score": {
                    "order": "desc"
                  }
                }
              ],
              "_source": {
                "include": [
                  "text",
                  "resource.*",
                  "language.*"
                ]
              },
              "size": 5
            }
          },
          "average_score": {
            "avg": {
              "script": "_score"
            }
          }
        }
      }
    },
    "from": 0,
    "size": 0,
    "_source": [
      "text",
      "resource.*",
      "language.*"
    ],
    "query": {
      "bool": {
        "must": [
          {
            "query_string": {
              "query": "inna alatheena",
              "fuzziness": 1,
              "fields": [
                "text^1.6",
                "text.stemmed"
              ],
              "minimum_should_match": "85%"
            }
          }
        ],
        "should": [
            {
              "match": {
                  "text": {
                      "query": "inna alatheena",
                      "type": "phrase"
                  }
              }
          }
          ]
      }
    }
  }
  </code></pre>
  
  <p>Note: <code>alatheena</code> searched without the <code>~</code> will not return anything although I have <code>allatheena</code> in the indices. So I must do a fuzzy search. </p>
  
  <p>Any thoughts?</p>