2012-05-06 12 views
7

I'de desea filtrar los resultados de una consulta elasticsearch y recuperar sólo los que tienen un campo que no está vacíaelasticsearch: obtener sólo los elementos que tiene una llave que no esté vacío determinado a partir de la URL

Por ejemplo. dando los siguientes datos

{ 
    total: 4912, 
    max_score: 1, 
    hits: [ 
{ 
    { 
    _index: "gcba", 
    _type: "bafici", 
    _id: "5a93472b-5db4-4ff9-8c8a-d13158e72d5f-62", 
    _score: 1, 
    _source: { 
     id_film: "23", 
     title: "great film", 
    } 
    }, 
    { 
    _index: "gcba", 
    _type: "bafici", 
    _id: "2732fbf4-4e55-4794-8e98-e5d5fa6a0419-40", 
    _score: 1, 
    _source: { 
     name: "conference", 
     [...] 
    } 
    } 
} 

me gustaría emitir algo así como

.../_search?from=1&size=100&q=id_film:'*' 

para obtener sólo aquellos elementos con un valor id_film

Respuesta

5

ES solo devolverán los documentos que tienen ese campo en particular por predeterminado al hacer una consulta de comodín:

% curl -XPUT http://localhost:9200/foo/bar/1 -d '{"id":1,"id_film":23}' 
{"ok":true,"_index":"foo","_type":"bar","_id":"1","_version":1}% 

% curl -XPUT http://localhost:9200/foo/bar/2 -d '{"id":2,"foo":23}' 
{"ok":true,"_index":"foo","_type":"bar","_id":"2","_version":1}% 

% curl "http://localhost:9200/foo/_search?q=id_film:*&pretty=true" 
{ 
    "took" : 2, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 1, 
    "max_score" : 1.0, 
    "hits" : [ { 
     "_index" : "foo", 
     "_type" : "bar", 
     "_id" : "1", 
     "_score" : 1.0, "_source" : {"id":1,"id_film":23} 
    } ] 
    } 
}% 
+0

muchas gracias! eso es exactamente en lo que estoy pensando, pero me equivoqué con las cosas, ¡sin las citas funciona muy bien! – opensas

4

También puede usar el existe (o faltantes) filtros. Ver aquí:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-exists-filter.html

Lo único es que se trata de un filtro, no una consulta. Para que funcione con el método de búsqueda, necesita una consulta de match_all y existe como el filtro. (o bien, use una consulta de constante_core con este filtro especificado dentro de ella)

+0

Sí, los filtros pueden no estar en la estructura de consulta, pero pueden almacenarse en caché ... mucho más adecuados para uso en producción – gatoatigrado

Cuestiones relacionadas