Elasti c Search / Elasica php - запрос OR для поля, содержащего NULL, не работает - PullRequest
0 голосов
/ 07 мая 2020

Как я могу запросить только те документы, в которых location_id null или location.country_id входит в набор заданных идентификаторов? Это текущий запрос, но он мне вообще ничего не возвращает ... Если я удалю location_id из запроса, он сработает и вернет мне хотя бы документы, соответствующие идентификаторам стран.

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

1 Ответ

2 голосов
/ 07 мая 2020

В elasticsearch Должно быть И, а должно вести себя как ИЛИ. Ваш запрос преобразуется в locationId, равный нулю И location.country_id В [набор идентификаторов]. Необходимо заменить на следует.

Запрос:

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