2015-12-09 6 views
0

Как я могу выполнить множественную вложенную агрегацию?NEST - Как я могу выполнить множественную вложенную агрегацию?

Я пытался что-то вроде этого:

Aggregations(x => x 
        .Nested("Facets", y => y.Path("categories") 
        .Aggregations(r => r.Terms("categories", w => w.Field(q => q.Categories.FirstOrDefault().Id)) 
       )).Nested("Facets2", s => s.Path("brand") 
        .Aggregations(e => e.Terms("brand", w => w.Field(q => q.Brand.Id)) 
       ))); 

Но она возвращает Facets2 как ребенка Facets

Может кто-нибудь помочь?

+0

Какую версию НЕСТ вы используете ? – Rob

ответ

0

агрегированными, что у вас есть работа, как ожидается, с NEST версией клиента 1.7.1, как показано в этом примере

void Main() 
{ 
    var settings = new ConnectionSettings(); 
    var connection = new InMemoryConnection(settings); 
    var client = new ElasticClient(connection : connection); 

    var response = client.Search<Example>(s => s 
     .Aggregations(aggs => aggs 
      .Nested("Facets", nested => nested 
       .Path(p => p.Categories) 
       .Aggregations(r => r 
        .Terms("categories", w => w 
         .Field(q => q.Categories.FirstOrDefault().Id) 
        ) 
       ) 
      ) 
      .Nested("Facets2", nested => nested 
       .Path(p => p.Brand) 
       .Aggregations(e => e 
        .Terms("brand", w => w 
         .Field(q => q.Brand.Id) 
        ) 
       ) 
      ) 
     ) 
    ); 

    Console.WriteLine(Encoding.UTF8.GetString(response.RequestInformation.Request)); 
} 

public class Example 
{ 
    public IList<Category> Categories { get; set; } 
    public Brand Brand { get; set; } 
} 

public class Brand 
{ 
    public int Id { get; set; } 
} 

public class Category 
{ 
    public int Id { get; set; } 
} 

Это выводит следующий запрос запрос

{ 
    "aggs": { 
    "Facets": { 
     "nested": { 
     "path": "categories" 
     }, 
     "aggs": { 
     "categories": { 
      "terms": { 
      "field": "categories.id" 
      } 
     } 
     } 
    }, 
    "Facets2": { 
     "nested": { 
     "path": "brand" 
     }, 
     "aggs": { 
     "brand": { 
      "terms": { 
      "field": "brand.id" 
      } 
     } 
     } 
    } 
    } 
} 
+0

Да, я думаю, что я ошибся с некоторыми charaters в моем собственном коде. он работает., спасибо :) –

+0

Не беспокойтесь, рад помочь :) –