2016-04-28 7 views
0

** Ich versuche zu aggregieren und Preisbereiche zu finden, wenn auf der Grundlage von geschachtelten Angebotspreis Array (verschachtelte Array) Objekt von sellerInfoES. Internes Feld ist "offerPrice". Wie kann ich Aggregation für das verschachtelte Array-Feld in Elasticsearch schreiben? Ich habe diese folgende Abfrage versucht, aber es funktioniert nicht. Immer diese Fehlermeldung: Parse Fehler [zwei Aggregationstypdefinitionen gefunden in [price_ranges]: [verschachtelte] und [Filter]]Wie funktioniert ElasticSearch verschachtelten Bereich Aggregation Abfrage

Mapping:

{ 
    "productsearch": { 
     "mappings": { 
     "product": { 
      "properties": { 
       "brand": { 
        "type": "string" 
       }, 
       "categories": { 
        "type": "string" 
       }, 
       "model": { 
        "type": "string" 
       }, 
       "mrp": { 
        "type": "double" 
       }, 
       "productName": { 
        "type": "string" 
       }, 
       "rating": { 
        "type": "double" 
       }, 
       "reviewCount": { 
        "type": "long" 
       }, 
       "sellerInfoES": { 
        "type": "nested", 
        "properties": { 
        "addr": { 
         "type": "string" 
        }, 
        "country": { 
         "type": "string" 
        }, 
        "geoAddress": { 
         "type": "string" 
        }, 
        "location": { 
         "type": "string" 
        }, 
        "offerPrice": { 
         "type": "double" 
        }, 
        "pinCode": { 
         "type": "string" 
        }, 
        "sellerId": { 
         "type": "long" 
        }, 
        "sellerLocation": { 
         "type": "geo_point" 
        }, 
        "state": { 
         "type": "string" 
        } 
        } 
       }, 
       "sku": { 
        "type": "long" 
       }, 
       "subCategory": { 
        "type": "string" 
       } 
      } 
     } 
     } 
    } 
} 

Abfrage:

{ 
    "price_ranges": { 
    "nested": { 
     "path": "sellerInfoES" 
    }, 
    "aggs": { 
     "range": { 
     "field": "offerPrice", 
     "ranges": [ 
      { 
      "gte": 1000 
      }, 
      { 
      "gte": 1000, 
      "lte": 10000 
      }, 
      { 
      "gte": 10000, 
      "lte": 25000 
      }, 
      { 
      "gte": 25000 
      } 
     ] 
     } 
    } 
    } 
} 

Antwort

1

Sie müssen sub_aggregation verwenden. Verwenden Sie range aggregation innen nested aggregation wie:

{ 
"aggs": { 
    "nested_sellerInfo": { 
    "nested": { 
     "path": "sellerInfoES" 
    }, 
    "aggs": { 
     "offer_price_range": { 
      "range": { 
       "field": "sellerInfoES.offerPrice", 
       "ranges": [ 
       { 
        "from": 1000 
       }, 
       { 
        "from": 1000, 
        "to": 10000 
       }, 
       { 
        "from": 10000, 
        "to": 25000 
       }, 
       { 
        "from": 25000 
       } 
       ] 
      } 
     } 
     } 
    } 
    } 
    } 

hoffe, das hilft !!

+0

Super! Es funktioniert. Danke vielmals ! –

+0

Sie können es als akzeptiert markieren dann ..: P – Richa

Verwandte Themen