如何在弹性search.net基于多个字段创建动态嵌套聚合查询

时间:2019-01-31 04:48:28

标签: c# elasticsearch aggregate

如何在Elastic search.net中基于多个字段创建动态嵌套聚合查询。

这些是我的字段。

  1. 关键字1
  2. 关键字2
  3. 关键字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 fields.so基于领域指望我希望在.NET弹性搜索嵌套aggeration。

先谢谢了。

0 个答案:

没有答案