Вложенная агрегация Elasticsearch с вложенным объектом с использованием NEST - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь выполнить агрегацию для вложенного объекта.Ниже мой JSON.Первый пример кода ниже успешно возвращает идентификатор ProductCategory Id.Однако я хочу вернуть идентификатор категории и имя в агрегации.Я подумал, что могу попробовать второй пример кода ниже, но он не работает.

"productCategories": [{
    "id":6,
    "productId":6,
    "categoryId":4,
    "category":{
        "parentId":2,
        "name":"Air Fresheners",
        "id":6
    }
}]

Этот агрегирует идентификатор productCategory в качестве ключа:

        .Aggregations(aggs => aggs
            .Nested("agg-categories", nested => nested
                .Path(p => p.ProductCategories)
                .Aggregations(r => r
                    .Terms("agg-category", w => w
                        .Field(f => f.ProductCategories.First().Id)
                    )
                )
            )
        )

Но мне нужна категорияинформация, и эта не работает:

        .Aggregations(aggs => aggs
            .Nested("agg-categories", nested => nested
                .Path(p => p.ProductCategories.First().Category)
                .Aggregations(r => r
                    .Terms("agg-category", w => w
                        .Field(f => f.ProductCategories.First().Category.Id)
                    )
                )
            )
        )

1 Ответ

0 голосов
/ 26 апреля 2019

Если category просто отображается как object, то будет работать следующее

var searchResponse = client.Search<Document>(s => s
    .Aggregations(aggs => aggs
        .Nested("agg-categories", nested => nested
            .Path(p => p.ProductCategories)
            .Aggregations(r => r
                .Terms("agg-category", w => w
                    .Field(f => f.ProductCategories.First().Category.Id)
                )
            )
        )
    )
);
...