2017-02-21 14 views
0

Bei Datenmodellstruktur wie diese,Filtern nach aggregierten Bucket-Schlüsseln?

{ 
    Id: 123, 
    "string_facet": [ 
     { 
      "name": "make", 
      "value": "Audi" 
     }, 
     { 
      "name": "carListType", 
      "value": "PERSON EU" 
     }, 
     { 
      "name": "modelType", 
      "value": "" 
     }, 
     { 
      "name": "engineBrand", 
      "value": "APT" 
     }, 
     { 
      "name": "typeDescription", 
      "value": "8D2" 
     } 
    ], 
    "number_facet": [ 
     { 
      "name": "typeNumber", 
      "value": 4614 
     }, 
     { 
      "name": "serialNumber", 
      "value": 2 
     }, 
     { 
      "name": "engineSize", 
      "value": 18 
     }, 
     { 
      "name": "horsePower", 
      "value": 125 
     }, 
     { 
      "name": "kw", 
      "value": 92 
     }, 
     { 
      "name": "engineVolume", 
      "value": 1781 
     }, 
     { 
      "name": "listType", 
      "value": 0 
     } 
    ], 
    "dateTime_facet": [ 
     { 
      "name": "fromDate", 
      "value": "1999-04-01T00:00:00" 
     }, 
     { 
      "name": "toDate", 
      "value": "2000-10-01T00:00:00" 
     } 
    ]  
} 

Ich möchte Aggregate Namen bekommen Facette und Werte pro Name. Ich bin jedoch nur an Facetten interessiert, die bestimmte Namen haben, wie zum Beispiel: make und engineBrand. Beachten Sie, dass Facetten vom Typ geschachtelt sind.

Ich habe den folgenden .NEST Ausdruck versucht, aber es gibt immer noch alle Facettennamen zurück.

.Global("global", g => g 
    .Aggregations(ag => ag 
     .Filter("global_makes", f => f 
      .Filter(ff => ff 
       .Nested(n => n 
       .Path("string_facet") 
       .Filter(pf => pf.Term("string_facet.name", "make"))) 
       ) 
       .Aggregations(agg => agg 
        .Nested("nested_string_facet", nested => nested 
         .Path("string_facet") 
         .Aggregations(stringFacet => stringFacet 
          .Terms("name", nameAgg => nameAgg.Field("string_facet.name").Size(0) 
           .Aggregations(nameAggNext => nameAggNext 
            .Terms("value", valueAgg => valueAgg.Field("string_facet.value").Size(0)) 
           ) 
          ) 
         ) 
        ) 
       ) 
      ) 
     ) 
    ) 
); 

ich einen Filter in globalen haben, (Umfang einer in Abfrage übergeben zu verlieren) und dann nur auf string_facet.name filtern, die „make“ entsprechen, aber die Ergebnisse sind immer noch alle anderen auch Namen. Wie filtere ich die Aggregation aus, um nur Buckets einzuschließen, in denen Name "make" ist?

Antwort