Агрегации Elasticsearch: стратегия доступа к дополнительным полям - PullRequest
0 голосов
/ 29 апреля 2019

Я использую следующий код для агрегации. Он только возвращает идентификатор, и я также хотел бы вернуть имя. Мы сделали проект несколько лет назад, и мы проиндексировали поле с именем idName (разделенное |), но это было очень грязное решение. Мне интересно, есть ли лучшие способы сделать это с последней версией Elastic?

.Aggregations(aggs => aggs
    .Nested("nested_cat", nested => nested
        .Path(p => p.Categories)
        .Aggregations(a1 => a1
            .Terms("terms_cat_id", terms1 => terms1
                .Field(f1 => f1.Categories.First().Id)
            )
        )
    )
)

Я читал, что есть еще 2 варианта. Один из них - выполнить субагрегацию, однако следующее не работает:

.Aggregations(aggs => aggs
    .Nested("nested_cat", nested => nested
        .Path(p => p.Categories)
        .Aggregations(a1 => a1
            .Terms("terms_cat_id", terms1 => terms1
                .Field(f1 => f1.Categories.First().Id)
                .Aggregations(a2 => a2
                    .Terms("terms_cat_name", terms2 => terms2
                        .Field(f2 => f2.Categories.First().Name)
                    )
                )
            )
        )
    )
)

Я также читал, что я могу использовать Скрипты, но я тоже не получил это работать.

1 Ответ

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

Мне удалось заставить работать субагрегирование, сопоставив category.name как «Ключевое слово» вместо «Текст»

...