Аггрегации с нулевыми полями

Всем привет !
у меня есть тип Person, в котором есть поле GroupId, которое может быть заполненно , может быть нулевым, а так же может даже не существовать,

{
Id: 1
Name : TоTo,
GroupId: 1
}
{
Id: 2
Name : TaTo,
GroupId: 2
}
{
Id: 3
Name : ToTo,
GroupId: 2
}
{
Id: 4
Name : TaTo,
GroupId: null
}
{
Id: 5
Name : TaTa
}

Мне необхожимо отсортировать Person по имени и аггрешировать результат по группам, в которых эти люди находятся. Еаким образом человек с нулевой или несуществующей гркппой это человек который сам по себе и так же должен быть представлен в результатах
пример сортировки по имени и вывод результатов по группе 5, 2, 4, 1

Такое вообще возможно ?

Лучше всего создать еще одно поле в котором будет хранится GroupId или Id, если GroupId отсутствует. Если изменять данные не желательно, то можно воспользоваться скриптом.

Спасибо за ответ!
Я сделала скрипт прямо в агрегации и таким образом она берет либо GroupId либо Id с минусом, т.к они могут быть одинаковыми

private readonly string _customGroupIdScript = "if (doc['groupId'].empty || doc['groupId'].value == null || doc['groupId'].value == 0)"
                                                       + "{ return -(Long.parseLong(doc['id'].value)); } "
                                                       + "else { return doc['groupId'].value; }";
body.Aggregations(
                            aggs => aggs
                                    .Terms(
                                        "groupId",
                                        gr => gr
                                              .Script(_customGroupIdScript)
                                              .Order(
                                                  new TermsOrder
                                                  {
                                                      Key = "current_score",
                                                      Order = parameters.Sort.Order == Order.ASC
                                                                  ? appliedSort ? SortOrder.Ascending : SortOrder.Descending
                                                                  : SortOrder.Descending
                                                  })
                                              .Size(parameters.Start + parameters.Length)
                                              .Aggregations(
                                                  aggss => aggss
                                                           .Max("current_score", tt => tt.Script("_score"))
                                                           .TopHits(
                                                               "first_elementid", tt => tt
                                                                                        .Source(s => s.Includes(f => f.Field("id")))
                                                                                        .Size(1))))
                                    .Cardinality("totalDistinct", c => c.Script(_customGroupIdScript))
                        );

Спасибо!

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.