Consulta "coincidente o nula" en elasticsearch

Supongamos que tengo un índice con todas las películas lanzadas de 2010 a 2019; ¿Cómo puedo traducir esta consulta en SQL a ElasticSearch?

Select *
From movies
Where 
    releaseDate between '2018-01-01' and '2019-01-01' and
    gender is like 'action' and
    (mainActorId = 42 or mainActorId is null)

Quiero todas las películas de acción de 2018 con un actor principal específico o ningún actor principal. ¿Cómo traduciría eso a una consulta de ElasticSearch?

Por lo que he leído hasta ahora en la documentación, podría usar algo como esto:

{  
   "size":0,
   "query":{  
      "bool":{  
         "must":[  
            {  
               "range":{  
                  "releaseDate":{  
                     "from":"2018-01-01T00:00:01.531Z",
                     "to":"2019-01-01T00:00:01.531Z",
                     "include_lower":true,
                     "include_upper":true,
                     "boost":1.0
                  }
               }
            },
            {  
               "terms":{  
                  "gender":[  
                     "action"
                  ],
                  "boost":1.0
               }
            },
            {  
               "terms":{  
                  "mainActorId":[  
                     42,
                     56
                  ],
                  "boost":1.0
               }
            }
         ],
         "must_not":[  
            {  
               "exists":{  
                  "field":"mainActorId",
                  "boost":1.0
               }
            }
         ],
         "adjust_pure_negative":true,
         "boost":1.0
      }
   }
}

Pero eso no me da ningún éxito, a pesar de que hay películas de acción lanzadas en 2018 con el actor principal que quiero (o ningún actor principal). Si elimino la cláusula "must_not exist", la consulta funciona bien y me da las películas de acción con los actores principales que quiero, pero también quiero películas de acción sin actores principales ...

Respuesta 1

Hola, tengo un problema con mi aplicación de Android. El problema es cuando trato de configurar una nueva vista. public view getView (int position, View convertView, ViewGroup parent) {View v = convertView; ...

el resultado es ABCDDC C2 B2 BA ¿Por qué el resultado no es AB B2 CD DC C2 B2 BA en el primer tiempo? Hice li.add ("B2") si word.equals "B". ¿Es solo la diferencia entre next () y previous ()? Quiero ...

Estoy desarrollando una aplicación Java que necesita un componente especial para atributos dinámicos. Los argumentos se serializan (usando JSON) y se almacenan en una base de datos y luego se deserializan en tiempo de ejecución. Todos ...

Primer código: Bond [] bond = null; pruebe {JSONArray jsonArray = new JSONArray (resultado); bonos = nuevo enlace [jsonArray.length ()]; para (int i = 0; i <jsonArray.length (); ...