在Elasticsearch中将多个查询与"OR"或"AND"组合在一起

Deb*_*aul 5 elasticsearch

我有两个不同的查询,我想将它们与'OR'/'AND'组合在一起.我怎么做?

例如,对于给定的查询,我只想在elasticsearch中运行Query1或Query2.

查询1:

{
   "query": {
      "filtered": {
         "query": { 
            "query_string":{  
               "query":"Batman",
               "default_operator":"AND",
               "fields"::[  
                  "Movies._all"
               ]
            }
         },
         "filter": {
            "bool": {
               "must": [  
                  {  
                     "query":{  
                        "filtered":{  
                           "filter":{  
                              "and":[  
                                 {  
                                    "term":{  
                                       "cast.firstName":"Christian "
                                    }
                                 },
                                 {  
                                    "term":{  
                                       "cast.lastName":"Bale"
                                    }
                                 }
                              ]
                           }
                        }
                     }
                  }
               ]
            }
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

QUERY2:

{
   "query": {
      "filtered": {
         "query": { 
            "query_string":{  
               "query":"Dark Knight",
               "default_operator":"AND",
               "fields"::[  
                  "Movies._all"
               ]
            }
         },
         "filter": {
            "bool": {
               "must": [  
                  {  
                     "query":{  
                        "filtered":{  
                           "filter":{  
                              "and":[  
                                 {  
                                    "term":{  
                                       "director.firstName":"Christopher"
                                    }
                                 },
                                 {  
                                    "term":{  
                                       "director.lastName":"Nolan"
                                    }
                                 }
                              ]
                           }
                        }
                     }
                  }
               ]
            }
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

Vin*_*han 12

你需要使用bool查询 下面的东西会工作正常 -

{
  "query" : {
    "bool" : { 
      "must" : [
        { // Query1 },
        { // Query2}
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

对AND使用必须,对OR应使用

  • 这不符合我的预期。即使must子句之一没有命中,它仍然会返回文档。 (4认同)