Second level terms aggregation "ConsumerType" returns 0 matches. But I could get the results in Kibana. Please advise what i'm missing here

My Code:

[ElasticsearchType(Name="abc-orders")]
public class ebizOrders
{
public string buyflowsessionid { get; set; }
public string buyfloworderid { get; set; }
public string ordersubmissiontype { get; set; }
public string level1marketname { get; set; }
public int level1marketid { get; set; }
public DateTime createdate { get; set; }
public cls_Details details { get; set; }
}

public class cls_Details
{
    public cls_ConsumerInfo ConsumerInfo { get; set; }
}

public class cls_ConsumerInfo
{
    public string ConsumerType { get; set; }
}

var SearchResult = _connectionToEs.EsClient().Search(s => s
.Index(searchIndex)
.Type(searchDoc)
.Query(q => q
.Bool(b => b
.Must(mu => mu
.QueryString(qr => qr
.Query(queryString)
.DefaultField("*")
.AnalyzeWildcard(true)
)
)
)
)
.Aggregations(a => a
.DateRange("Order_Date_Ranges", date => date
.Field(p => p.createdate)
.Ranges(
r => r.From(fromDt).To(toDt),
r => r.From(fromDtPrev).To(toDtPrev),
r => r.From(fromDt1w).To(toDt1w),
r => r.From(fromDt2w).To(toDt2w)
)
.TimeZone("-04:00")
.Aggregations(childAggs => childAggs
.Terms("FullFillmentType", ff => ff.Field(p => p.ordersubmissiontype.Suffix("keyword"))
.Size(5)
.Aggregations(aa=>aa
.Terms("ConsumerType",ct=>ct.Field(p1=>p1.details.ConsumerInfo.ConsumerType.Suffix("Ctype"))
.Size(5)
.Aggregations(aa1 => aa1
.Cardinality("UniqueOrders", uo => uo.Field(f => f.buyfloworderid.Suffix("key")))
)
)
)
)
)
)
)
);

Json Format - This is the one I want to build in NEST.Net

{
  "aggs": {
    "2": {
      "date_range": {
        "field": "createdate",
        "ranges": [{
          "from": "now-3h-4h",
          "to": "now-4h"
        }]
      },
      "aggs": {
        "5": {
          "terms": {
            "field": "ordersubmissiontype.keyword",
            "size": 5,
            "order": {
              "1": "desc"
            }
          },
          "aggs": {
            "1": {
              "cardinality": {
                "field": "buyfloworderid.keyword"
              }
            },
            "4": {
              "terms": {
                "field": "details.ConsumerInfo.ConsumerType.keyword",
                "size": 5,
                "order": {
                  "1": "desc"
                }
              },
              "aggs": {
                "1": {
                  "cardinality": {
                    "field": "buyfloworderid.keyword"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

To build the exact JSON you have posted would be

var searchResponse = client.Search<ebizOrders>(s => s
	.Aggregations(a => a
		.DateRange("2", dr => dr
			.Field(f => f.createdate)
			.Ranges(r => r
				.From("now-3h-4h")
				.To("now-4h")
			)
			.Aggregations(aa => aa
				.Terms("5", t => t
					.Field(f => f.ordersubmissiontype.Suffix("keyword"))
					.Size(5)
					.Order(o => o
						.Descending("1")
					)
					.Aggregations(aaa => aaa
						.Cardinality("1", c => c
							.Field(f => f.buyfloworderid.Suffix("keyword"))
						)
						.Terms("4", tt => tt
							.Field("details.ConsumerInfo.ConsumerType.keyword")
							.Size(5)
							.Order(o => o
								.Descending("1")
							)
							.Aggregations(aaaa => aaaa
								.Cardinality("1", cc => cc
									.Field(f => f.buyfloworderid.Suffix("keyword"))
								)
							)
						)
					)
				)
			)
		)
	)
);

Note that .Field("details.ConsumerInfo.ConsumerType.keyword") uses a string because using a lambda expressions here will result in ConsumerInfo and ConsumerType being camel-cased, unless .DefaultFieldNameInferrer(f => f) is set on ConnectionSettings.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.