1

複数のネストされた集計を行うにはどうすればよいですか?

私はこのようなことを試しました:

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

誰でも助けることができますか?

4

1 に答える 1

2

この例で示されているように、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"
          }
        }
      }
    }
  }
}
于 2015-12-10T03:15:50.657 に答える