2014-11-26 5 views
9

Se ho un documenti come questo:Esiste un modo per non restituire gli array quando si specificano i campi di restituzione in una query Elasticsearch?

[ 
    { 
     "model": "iPhone", 
     "brand": "Apple" 
    }, 
    { 
     "model": "Nexus 5", 
     "brand": "Google" 
    } 
] 

E che faccio una query che restituisce solo il campo model in una query, come questo:

{ 
    "fields": ["model"], 
    "query": { 
     "term": { 
      "brand": "apple" 
     } 
    } 
} 

Poi ogni campo documento viene restituito entro un array come questo:

{ "model": ["iPhone"] } 

anziché

{ "model": "iPhone" } 

Come posso evitarlo e ottenere i campi nello stesso formato di quando l'opzione di query fields non è definita?

risposta

18

Alla fine la risposta è stata abbastanza semplice: è necessario utilizzare l'istanza di query _source di fields.

Esempio:

{ 
    "_source": ["model"], 
    "query": { 
     "term": { 
      "brand": "apple" 
     } 
    } 
} 

In questo modo ottengo i documenti nel seguente formato, come in quella originale (senza l'opzione _source):

{ "model": "iPhone" } 
+0

10 upvotes se potessi – tyler

+0

@tyler Haha, io sono contento che ti ha aiutato! –

+1

No, non ti meriti nessun upvotes, perché la tua risposta è fuorviante - l'uso del parametro Fields è molto più efficiente dell'uso di _souce (salva IO del disco e CPU perché non deve analizzare la _source). Mi piacerebbe davvero sapere come restituire i campi del documento usando la definizione Fields nello stesso formato in cui sono stati forniti al momento dell'indicizzazione. Può salvarmi un'intera iterazione (che può essere su un sacco di documenti) solo per rimuovere quegli array ... –

0

Ho avuto lo stesso problema, e in effetti (come ha detto Wax Cage) ho pensato che lo _source avrebbe comportato qualche problema di prestazioni. Penso che utilizzando sia fields e _source risolve il problema:

const fields = ['model'] 

{ 
    fields: fields, 
    _source: fields 
    query: { 
    term: { 
     brand: 'apple' 
    } 
    } 
} 
+0

Sei sicuro? Questo non solo ha gli inconvenienti di entrambe le soluzioni? La tua risposta è più grande, perché hai sia campi che fonte in risposta. E l'analisi successiva di tutte le fonti di documenti pertinenti avviene comunque ... –

Problemi correlati