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
Vous devez vous connecter pour publier un commentaire.
La
XContentBuilder
est muté à chaque appel de méthode, le générateur de modèle est juste pour des raisons de commodité. Ainsi, vous pouvez interrompre l'enchaînement des appels à tout momentAussi loin que
XContentBuilder
va, je le crains pas. ES lui-même utilise cette approche de passant autour d'une instance de générateur de différentes méthodes, qui vont écrire leur contenu; par exemple, bit.ly/19pcitB ou son interface bit.ly/1d0KKpbOk alors. Je suppose que je peux vivre avec ça. Merci!!!!
OriginalL'auteur knutwalker