Как создать запрос динамических вложенных агрегатов в Elastic search.net на основе нескольких полей.
Это мои поля.
- ключевое слово 1
- ключевое слово 2
- ключевое слово 3
Это мой статический запрос.
ISearchResponse<T> response = client.Search<T>
(
s => s
.Index(indexName)
.Type(docType)
.Size(0)
.RequestConfiguration(r => r.DisableDirectStreaming())
.Aggregations
(
a => a.Terms("result_by_keyword_1", t => t.Field("keyword 1").Missing("N/A").Size(10000)
.Aggregations
(
ag => ag.Terms("result_by_keyword_2", tg => tg.Field("keyword 2").Missing("N/A").Size(10000)
.Aggregations
(
agf => agf.Terms("result_by_keyword_3", tfg => tfg.Field("keyword 3").Missing("N/A").Size(10000))
))
))
)
);
Мне нужнодоступ к данным, как это:
foreach (var bucket in response.Aggs.Terms("result_by_keyword_1").Buckets)
{
foreach (var innerBucket in bucket.Terms("result_by_keyword_2").Buckets)
{
foreach (var innerBucket1 in innerBucket.Terms("result_by_keyword_3").Buckets)
{
AggregateData aggData = new AggregateData();
aggData.keyword1= bucket.Key;
aggData.keyword2= innerBucket.Key;
aggData.keyword3= innerBucket1.Key;
aggData.recordcount = innerBucket1.DocCount;
results.Add(aggData);
}
}
}
Проблемы: На самом деле я хочу создать динамический запрос, основанный на нескольких полях.здесь у меня есть 3 поля, но может быть больше 3 полей. Поэтому, исходя из количества полей, я хочу вложенную агрегацию при упругом поиске в .net.
Заранее спасибо.