Multi-campo, multi-palavra, correspondência sem query_string

Gostaria de poder comparar uma pesquisa de várias palavras com vários campos em que cada palavra pesquisada está contidaqualquer dos campos, qualquer combinação. O problema é que eu gostaria deEvite usar query_string.

curl -X POST "http://localhost:9200/index/document/1" -d '{"id":1,"firstname":"john","middlename":"clark","lastname":"smith"}'
curl -X POST "http://localhost:9200/index/document/2" -d '{"id":2,"firstname":"john","middlename":"paladini","lastname":"miranda"}'

Eu gostaria que a pesquisa por 'John Smith' correspondesse apenas ao documento 1. A consulta a seguir faz o que eu preciso, mas eu prefiro evitar o uso de query_string caso o usuário passe "OR", "AND" e qualquer um dos outros parâmetros avançados.

curl -X GET 'http://localhost:9200/index/_search?per_page=10&pretty' -d '{
  "query": {
    "query_string": {
      "query": "john smith",
      "default_operator": "AND",
      "fields": [
        "firstname",
        "lastname",
        "middlename"
      ]
    }
  }
}'

questionAnswers(3)

yourAnswerToTheQuestion