2017-06-29 5 views
0

J'ai une base de données ElasticSearch et j'ai un indice testConvertir requête ElasticSearch JSON en C# NEST

Voici le schéma:

PUT test 
{ 
    "settings" : { 
     "number_of_shards" : 1 
    }, 
    "mappings" : { 
     "channel" : { 
      "properties" : { 
       "id" : { "type" : "integer" }, 
       "name" : { "type" : "string" } 
      } 
     }, 
     "segment" : { 
      "properties" : { 
       "groupid" : { "type" : "text", "fielddata": true }, 
       "instrName" : { "type" : "text", "fielddata": true }, 
       "channelList" : { "type" : "object" } 
      } 
     } 
    } 
} 

J'aimerais convertir cette requête en code C# NEST:

GET /test/segment/_search 
    { 
     "aggs": { 
     "agg": { 
      "terms": { 
      "field": "instrName" 
      }, 
      "aggs": { 
      "agg2": { 
       "terms": { 
       "field": "groupid" 
       } 
      } 
      } 
     } 
     } 
} 

Je sais comment convertir une seule requête d'agrégation, mais pas une agrégation imbriquée

EDIT

Voici le code actuel mais j'obtiens une erreur 500 de ES

var res = elastic.Search<SegmentRecord>(
     s => s.Index(esIndex).Aggregations(a => a.Terms("instrName", x => x.Aggregations(w => w.Terms("groupid", sel => sel))))); 
+1

Pouvez-vous nous montrer votre code C# existant? – mjwills

+0

Jetez un oeil à l'exemple d'utilisation de l'agrégation imbriquée: https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/nested-aggregation-usage.html –

+0

@mjwills vient de le faire. s'il vous plaît jeter un oeil, merci –

Répondre

1

Vous n'avez pas spécifié le champ que chaque terms aggregation devrait fonctionner. Une agrégation terms avec un terms sous l'agrégation ressemble

var res = elastic.Search<SegmentRecord>(s => s 
    .Index(esIndex) 
    .Aggregations(a => a 
     .Terms("agg", t => t 
      .Field("instrName") 
      .Aggregations(sa => sa 
       .Terms("agg2", tt => tt 
        .Field("groupid") 
       ) 
      ) 
     ) 
    ) 
);