Elasticsearch在一个请求中组合了两种不同的查询类型

I'm wondering if there is a possibility to combine two query types, in my case I need a queryString and filtered query, each has to operate on a different field. the query filtered get all record who's in $postids $postids:multiple value of post_id and the query string is to search a words in text Currently I need two requests to archive this: Query filtered:

GET /myindex1/tweecoms/_search
{
"query" : {
        "filtered" : {
            "filter" : {
                "terms" : {
                    "post_id" : ['.$postids.']
                }
            }
        }
}

query String:

GET /myindex1/tweecoms/_search{
 "query": {
                   "query_string": {
                        "query": "*' . $sujet . '*",
                        "lenient": true
                    }
                    }
}

and I tried to combine it

GET /myindex1/tweecoms/_search

{
  "query": {
    "bool": {
      "should": [
        {
           "query_string": {
                        "query": "hhhh",
                        "lenient": true
                    }
        },
        {
          "filtered" : {
            "filter" : {
                "terms" : {
                    "post_id" : [0,157]
                }
            }
        }
        }
      ]
    }
  }
}`

but what i try run just the query string

I think you need to write query inside filtered clause. This will help you understand. Try this

{
  "query": {
    "filtered": {
      "query": {
        "query_string": {
          "query": "keyword"
        }
      },
      "filter": {
        "terms": {
          "post_id": [0,157]
        }
      }
    }
  }
}

The problem with your query is you are using should clause which will select either documents with given query string or those with given post_ids. You can replace should with must and will get expected results.

You could also use minimum_should_match parameter inside your query

I hope this helps