2014-04-25 17 views
18

C'è un modo per dire a elasticsearch di non restituire alcun metadata? Attualmente posso selezionare quali campi voglio essere restituiti in fonte. Ma voglio solo i campi nella fonte. Preferirei non avere i metadati restituiti perché non ne ho bisogno e salvarei parsing e trasporto non necessari.Filtra i campi dei metadati e restituisce solo i campi di origine in elasticsearch

Ho trovato la domanda precedente su Elasticsearch - how to return only data, not meta information? in cui qualcuno ha commentato che non era possibile farlo in quel momento. Ti chiedi se questa funzionalità è stata aggiunta o è ancora mancante?

+1

Per quanto ne so, questa funzionalità _still_ non esiste. Tuttavia, puoi creare un plugin per farlo [come mostrato qui] (https://github.com/imotov/elasticsearch-just-source/blob/master/src/main/java/org/elasticsearch/examples/justsource/ resto/action/RestJustSourceAction.java). – pickypg

+0

grazie! chiedendosi perché ES non ha questa funzionalità. Forse non ha una priorità abbastanza alta. – bagi

+0

Suppongo che alcune cose potrebbero diventare piuttosto difficili senza i metadati, in particolare il paging. – pickypg

risposta

16

response_filtering

API REST Tutto accettare una parametro filter_path che può essere utilizzato per ridurre la risposta restituita dal elasticsearch. Questo parametro prende una virgole elenco di filtri separati espresso con la notazione:

curl -XGET 'localhost:9200/_search?pretty&filter_path=took,hits.hits._id,hits.hits._score' 
{ 
    "took" : 3, 
    "hits" : { 
    "hits" : [ 
     { 
     "_id" : "3640", 
     "_score" : 1.0 
     }, 
     { 
     "_id" : "3642", 
     "_score" : 1.0 
     } 
    ] 
    } 
} 

in Python

def get_all(connection, index_name, type_name): 

    query = { 
     "match_all":{} 
    } 

    result = connection.search(index_name, type_name, 
      {"query": query}, 
      filter_path= ["took", "hits.hits._id", "hits.hits.score"]) 

    return result 

Se si desidera filtrare i campi sorgente_, si dovrebbe considerare che unisce la già esistente _source parametro (consultare Ottieni API per ulteriori dettagli) con il parametro filtro percorso r in questo modo:?

curl -XGET 'localhost:9200/_search?pretty&filter_path=hits.hits._source&_source=title' 
{ 
    "hits" : { 
    "hits" : [ { 
     "_source":{"title":"Book #2"} 
    }, { 
     "_source":{"title":"Book #1"} 
    }, { 
     "_source":{"title":"Book #3"} 
    } ] 
    } 
} 
2

Non è così difficile se lo conosciamo :)

http://localhost:9200/{index_name}/{tipo}/_search abbastanza & filter_path = preso, hits.hits._id, hits.hits._score, hits.hits._source

+0

http: // localhost: 9200/{index_name}/{tipo} /_search?pretty&filter_path=hits.hits._source –

Problemi correlati