How to index an array of Nested Type in Elasticsearch?

10,501
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();
Share:
10,501
Manoj
Author by

Manoj

Updated on June 09, 2022

Comments

  • Manoj
    Manoj almost 2 years

    I am working on ElasticSearch. Here I wanted to index an array of nested type fields through an JAVA api. Could any one give an example on this. I tried few yet they failed.

    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()); 
    }
    

    After indexing the data, when I read the response the data of the particular field looked like

    "eventnested.event_type": ["eyJldmVudF90eXBlIjoiUXVvdGF0aW9uIiwiZXZlbnRfYXR0cmlidXRlX2luc3RhbmNlIjoiMSIsImF0dHJpYnV0ZXMiOlsiZXlKbGRtVnVkRjloZEhSeWFXSjFkR1ZmYm1GdFpTSTZJbkJsY25OdmJpQWlMQ0psZG1WdWRGOWhkSFJ5YVdKMWRHVmZkbUZzZFdVaU9pSkxZWGtnVFdGcmFIVmlaV3hoSW4wPSJdLCJhdHRyaWJ1dGVzIjpbImV5SmxkbVZ1ZEY5aGRIUnlhV0oxZEdWZmJtRnRaU0k2SW5GMWIzUmxJQ0lzSW1WMlpXNTBYMkYwZEhKcFluVjBaVjkyWVd4MVpTSTZJblJvWlNCaWIza2djbUZ3WldRZ2RHaGxJSEJoYVhJZ2IyNGdiblZ0WlhKdmRYTWdiMk5qWVhOcGIyNXpMQ0IzYVhSb0lIUm9aU0JzWVhSbGMzUWdhVzVqYVdSbGJuUWdZbVZwYm1jZ2IyNGdSbkpwWkdGNUluMD0iXX0=","eyJldmVudF90eXBlIjoiUXVvdGF0aW9uIiwiZXZlbnRfYXR0cmlidXRlX2luc3RhbmNlIjoiMSIsImF0dHJpYnV0ZXMiOlsiZXlKbGRtVnVkRjloZEhSeWFXSjFkR1ZmYm1GdFpTSTZJbkJsY25OdmJpQWlMQ0psZG1WdWRGOWhkSFJ5YVdKMWRHVmZkbUZzZFdVaU9pSkxZWGtnVFdGcmFIVmlaV3hoSW4wPSJdLCJhdHRyaWJ1dGVzIjpbImV5SmxkbVZ1ZEY5aGRIUnlhV0oxZEdWZmJtRnRaU0k2SW5GMWIzUmxJQ0lzSW1WMlpXNTBYMkYwZEhKcFluVjBaVjkyWVd4MVpTSTZJblJvWlNCMFpXVnVZV2RsY2lCb1lYTWdZbVZsYmlCd2JHRmpaV1FnYVc0Z1lTQnpZV1psZEhrZ2FHOXRaU0JoYm1RZ2QybHNiQ0JpWlNCamFHRnlaMlZrSUhkcGRHZ2djbUZ3WlNKOSJdfQ=="

  • Manoj
    Manoj about 12 years
    Great Thanks for the help imotov, that worked. BTW, the indexed data are not looking to be in the same structure that we indexed. I tried the cURL localhost:9200/2012-02-16/_search/…
  • Manoj
    Manoj about 12 years
    response is showing the data like below, instead of an Object structure. Could u confirm if this is perfect "eventandfactnested.event_type" : [ "FamilyRelation", "Quotation", "Quotation", "PersonAttributes", "Quotation", "PersonCareer", "Quotation", "Quotation", "Quotation", "FamilyRelation", "PersonCareer", "Quotation", "CompanyLocation", "PersonRelation", "Quotation", "Quotation", "Quotation", "Quotation", "PersonEmailAddress", "Quotation", "Quotation", "Quotation", "PersonCareer", "Quotation", "PersonCareer", "PersonCareer", "Quotation", "Quotation" ]
  • imotov
    imotov about 12 years
    Manoj, if my answer worked for you, please mark it as accepted. This way users will know that this question is answered and it will increase my reputation score. If you have another question, it would be better to create a new question for it. Comments don't work well for asking and answering questions, they are just too short. The short answer to your second question is original object can be found in the _source field. The long answer is I think your schema might not work for you in the long run.