2015-01-14 10 views
9

Aşağıdaki gibi ElasticSearch'te kayıtlı bir belgem var. _source:ElasticSearch: groovy komut dosyasında belgenin iç içe geçmiş değerine erişme

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

Ben senaryosunu metrik toplama http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-scripted-metric-aggregation.html için doc.firstname kullanarak bir belgeye içindeki dize türü değeri erişebilirler.

Ama doc.medals[0].bucket.

bana yardım ve bana iç içe alanlar içindeki değerlerine erişmek için nasıl haber verir misiniz kullanarak alan değerini almak mümkün değilim?

cevap

9

Yuvalanmış özellikler için _source kullanın. Doc, bellekte yüklü alanları tutar. İç içe geçmiş belgeler yüklenmeyebilir ve _source ile erişilebilmelidir. Örneğin

:

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 
}