2016-03-28 23 views
0

İşte belge türüm: araçlar yuvalanmış tiptedir.Elasticsearch Yuvalı çıkış kümelerinin toplaması

document1 -

{ 
    "customerAge": 30, 
    "vehicles": [ 
    { 
     "brand": "Altima", 
     "year": 2005 
    }, 
    { 
     "brand": "Corolla", 
     "year": 2006 
    }, 
    { 
     "brand": "Camry", 
     "year": 2005 
    } 
    ] 
} 

document2 -

{ 
    "customerAge": 50, 
    "vehicles": [ 
    { 
     "brand": "Altima", 
     "year": 2009 
    }, 
    { 
     "brand": "Corolla", 
     "year": 2010 
    } 
    ] 
} 

Ben aracın markasının grup oluştururuz ve müşteri yaş ortalamaları hesaplamak için çalışıyorum. Yani bu örnekte "Altima" grubunun ortalama müşteri yaşı 40 olacaktır.

Bu sorguyu denedim ve ortalamalar boş.

Birisi lütfen yanlış ne yapıyorum yardım edebilir misiniz?

{ 
    "size": 0, 
    "aggs": { 
     "nestedtop": { 
     "nested": { 
      "path": "vehicles" 
     }, 
     "aggs": { 
      "3cc601456260531278": { 
       "terms": { 
        "field": "vehicles.brand" 
       }, 
       "aggs": { 
        "expfilter_yromb0g90dmjx20529": { 
        "filter": { 
         "match_all": {} 
        }, 
        "aggs": { 
         "yromb0g90dmjx20529": { 
          "min": { 
           "field": "customerAge" 
          } 
         } 
        } 
        } 
       } 
      } 
     } 
     } 
    } 
} 

cevap

0

Yuvalanmış bir toplama yalnızca iç içe geçmiş belge içindeki alanlara erişebilir. Kök belgedeki veya farklı bir iç içe geçmiş belgede alanları göremez. Bununla birlikte, iç içe geçmiş kapsamı bir reverse_nested aggregation ile ana öğeye geri alabiliriz.

{ 
    "size": 0, 
    "aggs": { 
     "nestedtop": { 
      "nested": { 
       "path": "vehicles" 
      }, 
      "aggs": { 
       "by_name": { 
        "terms": { 
         "field": "vehicles.brand" 
        }, 
        "aggs": { 
         "age_reverse": { 
          "reverse_nested": {}, 
          "aggs": { 
           "avg_age": { 
            "avg": { 
             "field": "customerAge" 
            } 
           } 
          } 
         } 
        } 

       } 
      } 
     } 
    } 
} 
+0

Tersine işlem pahalı mıdır? – user3658423

+0

Sanırım öyle değil. İç içe geçmiş kapsamı, ana belgeye – Rahul

+0

çözümüyle değiştirir. – user3658423