2012-04-16 10 views
6

Estoy trabajando en ElasticSearch. Aquí quería indexar una matriz de campos de tipo anidados a través de una API de JAVA. ¿Podría alguien dar un ejemplo sobre esto? Intenté algunos pero fallaron.Cómo indexar una matriz de Tipo anidado en Elasticsearch?

XContentBuilder xb1 = XContentFactory.jsonBuilder().startObject(); 
XContentBuilder xb2 = XContentFactory.jsonBuilder().startObject(); 

xb1.startArray("eventnested"); 
for(int j=0;j<2;j++) { 
    xb2.field("event_type",eventType); 
    xb2.field("event_attribute_instance",eventInstance); 
    xb2.startArray("attributes"); 
    for(int i=0;i<2;i++) { 
     XContentBuilder xb3 = XContentFactory.jsonBuilder().startObject(); 
     xb3.field("event_attribute_name", attrName); 
     xb3.field("event_attribute_value", attrValue); 
     xb2.value(xb3.copiedBytes()); 
    } 
    xb1.value(xb2.copiedBytes()); 
} 

Después de la indexación de los datos, cuando leí la respuesta de los datos del campo en particular parecían

"eventnested.event_type": [ "eyJldmVudF90eXBlIjoiUXVvdGF0aW9uIiwiZXZlbnRfYXR0cmlidXRlX2luc3RhbmNlIjoiMSIsImF0dHJpYnV0ZXMiOlsiZXlKbGRtVnVkRjloZEhSeWFXSjFkR1ZmYm1GdFpTSTZJbkJsY25OdmJpQWlMQ0psZG1WdWRGOWhkSFJ5YVdKMWRHVmZkbUZzZFdVaU9pSkxZWGtnVFdGcmFIVmlaV3hoSW4wPSJdLCJhdHRyaWJ1dGVzIjpbImV5SmxkbVZ1ZEY5aGRIUnlhV0oxZEdWZmJtRnRaU0k2SW5GMWIzUmxJQ0lzSW1WMlpXNTBYMkYwZEhKcFluVjBaVjkyWVd4MVpTSTZJblJvWlNCaWIza2djbUZ3WldRZ2RHaGxJSEJoYVhJZ2IyNGdiblZ0WlhKdmRYTWdiMk5qWVhOcGIyNXpMQ0IzYVhSb0lIUm9aU0JzWVhSbGMzUWdhVzVqYVdSbG JuUWdZbVZwYm1jZ2IyNGdSbkpwWkdGNUluMD0iXX0 =", "eyJldmVudF90eXBlIjoiUXVvdGF0aW9uIiwiZXZlbnRfYXR0cmlidXRlX2luc3RhbmNlIjoiMSIsImF0dHJpYnV0ZXMiOlsiZXlKbGRtVnVkRjloZEhSeWFXSjFkR1ZmYm1GdFpTSTZJbkJsY25OdmJpQWlMQ0psZG1WdWRGOWhkSFJ5YVdKMWRHVmZkbUZzZFdVaU9pSkxZWGtnVFdGcmFIVmlaV3hoSW4wPSJdLCJhdHRyaWJ1dGVzIjpbImV5SmxkbVZ1ZEY5aGRIUnlhV0oxZEdWZmJtRnRaU0k2SW5GMWIzUmxJQ0lzSW1WMlpXNTBYMkYwZEhKcFluVjBaVjkyWVd4MVpTSTZJblJvWlNCMFpXVnVZV2RsY2lCb1lYTWdZbVZsYmlCd2JHRmpaV1FnYVc0Z1lTQnpZV1psZEhrZ2FHOXRaU0JoYm1RZ2QybHNiQ0JpWlNCamFHRnlaMlZrSUhkcGRHZ2djbUZ3WlNKOSJdfQ =="

Respuesta

21
XContentBuilder xb = XContentFactory.jsonBuilder().startObject(); 

xb.startArray("eventnested"); 
for(int j=0;j<2;j++) { 
    xb.startObject(); 
    xb.field("event_type", eventType); 
    xb.field("event_attribute_instance", eventInstance); 
    xb.startArray("attributes"); 
    for(int i=0;i<2;i++) { 
     xb.startObject(); 
     xb.field("event_attribute_name", attrName); 
     xb.field("event_attribute_value", attrValue); 
     xb.endObject(); 
    } 
    xb.endArray(); 
    xb.endObject(); 
} 
xb.endArray(); 
+0

Grandes Gracias por la ayuda imotov, que funcionó. Por cierto, los datos indexados no buscan estar en la misma estructura que indizamos. Probé el cURL http: // localhost: 9200/2012-02-16/_search /? Pretty = true & fields = eventandfactnested.attributes.event_attribute_name & q = mother – Manoj

+0

respuesta está mostrando los datos como a continuación, en lugar de una estructura de objeto. Podría confirmar si es perfecto "eventandfactnested.event_type": ["FamilyRelation", "Cotización", "Cotización", "PersonAttributes", "Cotización", "PersonCareer", "Cotización", "Cotización", "Cotización "," FamilyRelation "," PersonCareer "," Cotización "," CompanyLocation "," PersonRelation "," Cotización "," Cotización "," Cotización "," Cotización "," PersonEmailAddress "," Cotización "," Cotización ", "Cita", "PersonCareer", "Cita", "PersonCareer", "PersonCareer", "Cotización", "Cita"] – Manoj

+0

Manoj, si mi respuesta ha funcionado para usted, márquela como aceptada. De esta forma, los usuarios sabrán que se responde a esta pregunta y aumentará mi puntaje de reputación. Si tiene otra pregunta, sería mejor crear una nueva pregunta para ella. Los comentarios no funcionan bien para hacer y responder preguntas, son demasiado cortos. La respuesta corta a su segunda pregunta es que el objeto original se puede encontrar en el campo _source. La respuesta larga es que creo que su esquema podría no funcionar para usted en el largo plazo. – imotov

Cuestiones relacionadas