2014-10-03 20 views
8

Ho la seguente mappaturaQuery di ricerca per recuperare i documenti nidificati in elasticsearch con sorgente_ disabilitato

{ 
    "cloth": { 
       "dynamic" : false, 
       "_source" : {"enabled" : false }, 
     "properties": { 
      "name": { 
       "type": "string", 
       "index": "analyzed" 
      }, 
      "variation": { 
       "type": "nested", 
       "properties": { 
        "size": { 
         "type": "string", 
         "index": "not_analyzed" 
        }, 
        "color": { 
         "type": "string", 
         "index": "not_analyzed" 
        } 
       } 
      } 
     } 
    } 
} 

io non sono in grado di capire un modo per recuperare i campi oggetto nidificati che utilizzano la query campi.

{ 
    "fields" : ["name" , "variation.size", "variation.color"], 
    "query" : { 
     "nested" : { 
      "path" : "variation", 
      "query" : { 
       "bool" : { 
        "must" : [ 
         { "term" : { "variation.size" : "XXL" } }, 
         { "term" : { "variation.color" : "red" } } 
         ] 
       } 
      } 
     } 
    } 
} 

La query precedente restituisce

"_id" : "1", 
    "_score" : 1.987628, 
    "fields" : { 
    "variation.size" : [ "XXL", "XL" ], 
    "variation.color" : [ "red", "black" ], 
    "name" : [ "Test shirt" ] 
    } 

Quando ho provato

"fields" : ["name" , "variation"] 

ho ottenuto l'errore

Stato: 400

motivo: "ElasticsearchIllegalArgumentException [campo [variazione] non è un campo foglia]"

Quale è come previsto.

Come posso ottenere l'oggetto variazione così com'è?

Risultato previsto. Ho bisogno di recuperare l'oggetto variabile nel suo complesso in modo da poter mantenere l'associazione di dimensioni e colore. Come "rosso" con "XXL".

"variation" : { "XXL" , "red"} 

Aggiornamento: Fonte è disabilitato per questo tipo Index.

risposta

4

Se si utilizza Source Filtering verrà restituito l'oggetti nidificati nel suo complesso, la query potrebbe essere:

{ 
    "_source": [ 
    "name", 
    "variation" 
    ], 
    "query": { 
    "nested": { 
     "path": "variation", 
     "query": { 
     "bool": { 
      "must": [ 
      { 
       "term": { 
       "variation.size": "XXL" 
       } 
      }, 
      { 
       "term": { 
       "variation.color": "red" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
+0

Il numero 1 è la sorgente disabilitata per il tipo. Il problema 2 riguarda la query che hai fornito, il risultato sono 2 oggetti variazione. variazione: [2] 0: {color: "red" size: "XXL"} - 1: {color: "black" size: "XL"} Ma stavo cercando solo un oggetto variazione che corrisponda a XXL e rosso. – user1760178

+0

1. Non puoi fare ciò che vuoi con 'fields'. 2. Se uno degli oggetti nidificati corrisponde alla query, non solo è possibile restituire il documento nidificato corrispondente, ma restituisce il documento radice con tutti i documenti nidificati. –

+0

L'ho capito ora. Ma la mia domanda qui è che la query _source non aiuta molto dato che Source è disabilitato per questo tipo. Quindi quale query dovrei usare per ottenere gli oggetti nidificati? – user1760178

1

si dovrebbe usare questo:.

"script_fields": { 
"variation": { 
    "script": { 
    "inline": "doc['variation.size'].value + ' ' + doc['variation.red'].value" 
    } 
} 
} 

Io uso elasticsearch v 5.1.1

+0

Puoi approfondire un po 'come e perché la tua proposta risolve il problema? In questo momento, la tua risposta potrebbe essere corretta, ma raramente è esplicativa ... – jkalden

+0

Hai ragione, ma forse qualcuno avrà problemi simili, quindi puoi trovare la risposta qui –

+0

Ti chiedo solo di spiegare la tua risposta, non di rimuoverla! – jkalden

Problemi correlati