XContentBuilder Elasticsearch pour la cartographie des objets internes

Je suis en train de créer un mappage pour les documents de la structure suivante:

"name":"Peter"
"id":"ABC123",  
"values":{
    "a":3.0123,        
    "b":1234
}

De sorte que la cartographie devrait ressembler à ceci:

{
 "properties":{"_all":{"enabled":"false"},
 "dynamic":"false",
 "_timestamp":{"enabled":true,"store":true},
 "properties": {
     "name":{"type":"string"},
     "id":{"type":"string"},
     "values": {
         "properties": {
              "a": {"type":"double"},
              "b":{"type":"double"}
          }
     }
   } 
  }
}

En réalité, le montant des propriétés possibles dans les "valeurs" est assez grand, disons 50 propriétés que j'ai à inclure..

Je suis actuellement à la génération de la cartographie de json avec le XContentBuilder, qui fonctionne vraiment bien pour moi.

Ce que je veux faire, c'est de l'encapsulation de la partie intérieure de la cartographie dans les "valeurs" dans un autre constructeur, car il rend le processus de cartographie plus facile à maintenir pour moi. Aussi j'ai déjà l'intérieur des propriétés des noms dans une liste, que j'aimerais effectuer une itération.

C'est mon normal mapping code ici.

XContentBuilder xbMapping = jsonBuilder()
            .startObject() //start root
                .startObject(PROPERTIES)
                    .startObject("_all").field("enabled", "false").endObject()
                    .field("dynamic", "false")
                    .startObject("_timestamp").field("enabled", true).field("store", true).endObject()
                    .startObject(PROPERTIES)
                        .startObject("name").field("type", "string").endObject()
                        .startObject("id").field("type", "string").endObject()
                        .startObject("values")
                            .startObject(PROPERTIES)
                                 //INNER MAPPING HERE!!
                            .endObject()
                        .endObject()
                .endObject()
            .endObject();

Je voudrais éviter de l'itération entre ces startObject et endObject et de plus en plus à faire la cartographie complète de l'intérieur de type quelque part d'autre et il suffit d'inclure cette partie là.

Je ne peux pas trouver une manière sophistiquée en ce moment avec XContentBuilder.

Merci pour tous les conseils

OriginalL'auteur skombijohn | 2014-01-13