The following documents should be found:
matches query 'my text' AND (has not field OR field with value)
I have tried the following:
GET /myIndex/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "my text"
          }
        },
        {
        }
      ],
      "filter": {
        "bool": {
          "must_not": {
            "exists": {
              "field": "myField"
            }
          },
          "must": {
            "terms": {
              "myField": [
                "myValue"
              ]
            }
          }
        }
      }
    }
  }
}
It should (but does not) work liek that:
must and filter partsmust select by querymust andmust_not`But this behaves like must combined with must_not via AND clause. E.g. when I removed "must" or "must_not" query works.
How change query to combine "must" with "must_not" via OR clause?
Elasticsearch version is 5.3.2
You need an extra bool filter between the must and must_not terms.
You should also think about your myField field. If it is defined as text or as keyword. Tested with elasticsearch 5.6.1 the following query works:
{
  "query": {
     "bool": {
        "must": [{
          "query_string": {
             "query": "this is a text content"
          }
        }],
        "filter": {
           "bool": {
              "should" : [{                
                 "bool" : {
                    "must_not": {
                      "exists": {
                         "field": "myField"
                       }
                     }
                  }
              },
              {
                "bool" : {
                  "must": {
                    "terms": {
                       "myField.keyword": ["my field exists and has a value"]
                     }
                   }
                }
              }]
         }
      }
   }
  }
}
                        On Elasticsearch 7.X, you can simply do:
{
  "query": {
    "bool": {
      "must": [
        {"match": {"field1": {"query": "Hero"}}}
      ],
      "must_not": [
        {"terms":{"field3":["Batman"]}},
      ]
    }
  }
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With