【发布时间】:2015-12-03 05:45:00
【问题描述】:
我有一个 ElasticSearch 数据库,我想在其中执行聚合。 我正在使用 NEST 和 lambda 表达式来创建查询。
但是,我需要同时对同一个文档(channel1 和 channel2)的多个字段进行聚合。 目前我有 2 个频道,所以我的查询可以正常工作。
var res = elasticClient.Search<DataRecord>(s => s
.Index(ElasticIndexName)
.Aggregations(a => a
.DateHistogram("mydoc", h => h
.Aggregations(ag => ag.Average("avg1", b => b.Field("channel1")).Average("avg2", b => b.Field("channel2")))
)
)
);
问题是没有。频道的数量可能不同,可能是三个或四个或其他什么,所以我想在下面放上我的 Func
ag => ag.Average("avg1", b => b.Field("channel1")).Average("avg2", b => b.Field("channel2"))
要动态创建(例如您在 SQL 查询中所做的),因为没有。只有在运行时才知道通道数。
例如 如果我有四个频道,查询应该是这样的:
var res = elasticClient.Search<DataRecord>(s => s
.Index(ElasticIndexName)
.Aggregations(a => a
.DateHistogram("mydoc", h => h
.Aggregations(ag => ag.Average("avg1", b => b.Field("channel1")).Average("avg2", b => b.Field("channel2")).Average("avg3", b => b.Field("channel3")).Average("avg4", b => b.Field("channel4")))
)
)
);
所以基本上我需要某种 for 循环,我可以在其中动态地构建 lambda 表达式
【问题讨论】:
标签: c# elasticsearch lambda nest