我有一个存储库,我的教学可以有0..n
灵修,这适用于在我的列表中显示摘要信息。我有一个字段,总结了用于此目的的相关灵修的数量。问题是我想在列表旁边提供一个方面的摘要,以允许我的用户将教学列表限制为只有具有相关灵修的那些。
我发现如果在查询之前列出了我的聚合,那么查询将被完全忽略。这对我来说非常令人惊讶,所以我用JSON修复了我的查询。我不确定如何使用NEST强制执行正确的订单。
我的查询如下:
{
"size": 3,
"sort": [ { "endDate": { "order": "desc" } } ],
"aggs": {
"teachers": {
"terms": { "field": "teachings.teacher.id" }
},
"audio": {
"terms": { "field": "teachings.hasAudio" }
},
"transcript": {
"terms": { "field": "teachings.hasTranscript" }
},
"landmark": {
"terms": { "field": "isLandmark" }
},
"devotionals": {
"terms": { "field": "teachings.numberOfDevotionals" }
}
}
}
其余的聚合几乎可以满足我的需求。我可以获得教师列表,以及其他项目的真/假桶。 我不满意的部分是聚合中的"devotionals"
子句。由于该字段是计数而不是布尔值,因此我可以使用{ {1}}聚合,我只是想知道教学是否任何灵修。
如何确定教学是否具有奉献精神?我一直在查看文档和直方图,因为我需要的水桶是" 0"和" 1或更多",而不是规则间隔。
答案 0 :(得分:0)
截至目前,我还没有回答我使用ElasticSearch提出的问题。但是,我确实有以下方法从响应中计算出我想要的结果:
TermsAggregate hasDevotional = searchResponse.Aggs.Terms("devotionals");
int numDevotionals = (int)hasDevotional.Buckets
.Where(b => float.Parse(b.Key) > 0)
.Sum(b => b.DocCount);
几点说明:
DocCount
属性为long
此解决方案并不漂亮,我真的希望能够计算"teachings.numberOfDevotionals"
字段大于0
的所有文档以及实际搜索结果。