TermAggregation с дополнительным TermAggregation, не работающим в AggregationDictionary - PullRequest
0 голосов
/ 15 апреля 2020

Используя NEST, у меня есть запрос, похожий на этот

var searchRequest = new SearchRequest<T>()
{
...
    Aggregations = new TermsAggregation("field1")
    {
        Field = "field1",
        Aggregations = new TermsAggregation("field2")
        {
            Field = "field2",
        }
    },
...
}

await _elasticClient.SearchAsync<T>(searchRequest)

, и я получаю результаты, как я ожидал, с агрегацией на "field2" для каждой альтернативы с "field1"

Мне нужны другие агрегаты, поэтому я поместил термины агрегации в AggregationDictionary.

var aggs = new AggregationDictionary();
aggs.Add("field1", new TermsAggregation("field1")
    {
        Field = "field1",
        Aggregations = new TermsAggregation("field2")
        {
            Field = "field2",
        }
    })
...
var searchRequest = new SearchRequest<T>()
{
...
    Aggregations = aggs,
...
}
...
await _elasticClient.SearchAsync<T>(searchRequest)

Теперь я получаю агрегацию на "field1", но не нахожу агрегацию на "field2".

Я что-то упустил или это должно работать таким образом?

Редактировать 1: Добавлен ключ для for AggregationDictionary.Add, чтобы мой пример кода (надеюсь) компилировался и включал мой SearchAsyn c call

1 Ответ

0 голосов
/ 15 апреля 2020
aggs.Add( new TermsAggregation("field1")
    {
        Field = "field1",
        Aggregations = new TermsAggregation("field2")
        {
            Field = "field2",
        }
    })

Этот код не будет компилироваться как AggregationDictionary.Add() сигнатура метода is

public void Add(string key, AggregationContainer value)

Следующее

var client = new ElasticClient();

var aggs = new AggregationDictionary();
aggs.Add("field1", new TermsAggregation("field1")
{
    Field = "field1",
    Aggregations = new TermsAggregation("field2")
    {
        Field = "field2",
    }
});

var request = new SearchRequest<object>
{
    Aggregations =aggs
};

var searchResponse = client.Search<object>(request);

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

{
  "aggs": {
    "field1": {
      "aggs": {
        "field2": {
          "terms": {
            "field": "field2"
          }
        }
      },
      "terms": {
        "field": "field1"
      }
    }
  }
}

Ознакомьтесь с документацией по написанию агрегатов . Агрегации можно объединять вместе на одном уровне, && объединяя их

...