2015-01-14 11 views
9

Ich habe ein Dokument in ElasticSearch wie folgt gespeichert. _Source:ElasticSearch: Zugriff auf Dokument geschachtelten Wert in groovy Skript

{ 
"firstname": "John", 
"lastname": "Smith", 
"medals":[ 
      { 
      "bucket": 100, 
      "count": 1 
      }, 
      { 
      "bucket": 150, 
      "count": 2 
      } 
     ] 
    } 

Ich kann den String-Typ Wert innerhalb eines Dokuments zugreifen doc.firstname für scripted metrische Aggregation http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-scripted-metric-aggregation.html verwenden.

Aber ich bin nicht in der Lage, das Feld Wert zu erhalten mit doc.medals[0].bucket.

Können Sie mir bitte und lassen Sie mich wissen, helfen, wie die Werte innerhalb verschachtelten Felder zugreifen?

Antwort

9

Verwenden Sie _source für verschachtelte Eigenschaften. Doc enthält Felder, die in den Speicher geladen werden. Verschachtelte Dokumente können nicht geladen werden und sollten mit _source aufgerufen werden.

Zum Beispiel:

GET index/type 
    { 
    "aggs": { 
     "NAME": { 
     "scripted_metric": { 
     "init_script": "_agg['collection']=[]", 
     "map_script": "_agg['tr'].add(_source.propertry1.prop);", 
     "combine_script": "return _agg", 
     "reduce_script": "return _aggs" 
     } 
    } 
    }, 
    "size": 0 
} 
Verwandte Themen