2012-05-06 1 views
7

I'de desidera filtrare i risultati di una query elasticsearch e recuperare solo quelli che hanno un campo non vuotoelasticsearch: ottenere solo gli elementi che ha una chiave non vuota certo dall'url

Ad esempio. dando i seguenti dati

{ 
    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", 
     [...] 
    } 
    } 
} 

mi piacerebbe rilasciare qualcosa come

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

per ottenere solo gli elementi con un valore id_film

risposta

5

ES restituirà solo i documenti che hanno quel particolare settore da impostazione predefinita quando si esegue una query con caratteri jolly:

% 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

grazie mille! questo è esattamente ciò a cui penso, ma ho incasinato la roba, senza le virgolette funziona alla grande! – opensas

4

È anche possibile utilizzare l'esistente (o mancanti) filtri. Vedi qui:

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

L'unica cosa è, è un filtro, non è una query. Per farlo funzionare con il metodo di ricerca, hai bisogno di una query di match_all ed esiste come filtro. (oppure, usa una query constant_score con questo filtro specificato al suo interno)

+0

sì, i filtri potrebbero non essere nella struttura della query, ma possono essere memorizzati nella cache ... imho molto più adatto per l'uso di produzione – gatoatigrado