-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Closed
Description
I'm trying to get aggregations to work with NEST, but result.Aggs.Terms("name").Items is empty.. The JSON beeing sent to ElasticSearch looks like this:
{
"size": 0,
"aggs": {
"calls_per_customer": {
"terms": {
"field": "customer.id",
"size": 10,
"order": {
"total_duration": "desc"
}
},
"aggs": {
"customer_name": {
"terms": {
"script": "_source.customer.name",
"size": 1
}
},
"total_duration": {
"sum": {
"field": "duration"
}
},
"average_duration": {
"avg": {
"field": "duration"
}
}
}
}
},
"query": {
"match_all": {}
},
"filter": {
"and": {
"filters": [
{
"term": {
"answered": true
}
},
{
"exists": {
"field": "customer.id"
}
}
]
}
}
}and produces the following result when querying manually in head-plugin:
took: 211
timed_out: false
_shards: {
total: 5
successful: 5
failed: 0
}
hits: {
total: 6691
max_score: 0
hits: [ ]
}
aggregations: {
calls_per_customer: {
buckets: [
{
key: ecd15513-3020-44e8-a3bd-XXX
doc_count: 865
total_duration: {
value: 262867
}
customer_name: {
buckets: [
{
key: Customer name 1
doc_count: 865
}
]
}
average_duration: {
value: 303.89248554913297
}
}
{
key: b716031f-18ae-4843-a34d-XXX
doc_count: 675
total_duration: {
value: 171038
}
customer_name: {
buckets: [
{
key: Customer name 2
doc_count: 675
}
]
}
average_duration: {
value: 253.38962962962964
.......
Am I doing something wrong here?
var esResult = _esClient.Search<ElasticCall>(s =>
{
var query = s.Query(qc => qc.MatchAll());
var filters = new List<FilterContainer>();
filters.Add(Filter<ElasticCall>.Term(call => call.Answered, true));
filters.Add(Filter<ElasticCall>.Exists("customer.id"));
query = query.Size(0);
if (callDirection.HasValue)
{
filters.Add(Filter<ElasticCall>.Term(call => call.Direction, callDirection));
}
if (fromDate.HasValue)
{
filters.Add(Filter<ElasticCall>.Range(rs => rs.GreaterOrEquals(fromDate)));
}
if (toDate.HasValue)
{
filters.Add(Filter<ElasticCall>.Range(r => r.LowerOrEquals(toDate)));
}
query.Aggregations(agg =>
agg.Terms("calls_per_customer", termsAggDescriptor => termsAggDescriptor.Field(call=>call.Customer.Id).Size(limitTop ?? 10).Aggregations(
aggs2 =>
aggs2.Terms("customer_name", s1 => s1.Script("_source.customer.name").Size(1))
.Sum("total_duration", s2 => s2.Field("duration"))
.Average("average_duration", s3 => s3.Field("duration")))));
var filtersAsFunctionArray = filters.Select(f => (Func<FilterDescriptor<ElasticCall>, FilterContainer>)((z) => f)).ToArray();
var outerAndFilter = Filter<ElasticCall>.And(filtersAsFunctionArray);
query.Filter(outerAndFilter);
//JSON is ok and returns expected result
var json = Encoding.UTF8.GetString(_esClient.Serializer.Serialize(query));
return query;
});
//NEST returns the first aggregation
var callsPerCust = esResult.Aggs.Terms("calls_per_customer");
//But nothing inside..
var callsCount = callsPerCust.Items.Count; //0!
Metadata
Metadata
Assignees
Labels
No labels