Elastic Search / Elasica php - 或对包含 NULL 的字段的查询不起作用

Elastic Search / Elasica php - OR query on field containing NULL not working

如何只查询 location_id 是 null locations.country_id 在一组给定 ID 中的文档?这是当前查询,但它根本 return 我什么都没有...如果我从查询中删除 location_id 它有效并且 return 至少给我匹配的文档国家/地区 ID。

{
   "bool":{
      "must":[
         {
            "bool":{
               "must_not":[
                  {
                     "exists":{
                        "field":"location_id"
                     }
                  }
               ],
               "must":[
                  {
                     "terms":{
                        "locations.country_id":[
                           18
                        ]
                     }
                  }
               ]
            }
         }
      ]
   }
}

在 elasticsearch 中,Must 是 AND 并且 Should 的行为类似于 OR 您的查询转换为 locationId is null AND locations.country_id In [set of ids]。 must需要换成should.

查询:

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must_not": [
              {
                "exists": {
                  "field": "location_id"
                }
              }
            ]
          }
        },
        {
          "terms": {
            "locations.country_id": [
              18
            ]
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}