2012-04-16 17 views
6

Pracuję nad ElasticSearch. Tutaj chciałem zindeksować tablicę zagnieżdżonych pól typu za pomocą api JAVA. Czy ktokolwiek mógłby dać przykład na ten temat? Próbowałem kilku, ale im się nie udało.Jak zindeksować tablicę typu zagnieżdżonego w 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()); 
} 

Po indeksowania danych, gdy czytam odpowiedź dane o konkretnej dziedzinie wyglądało

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

Odpowiedz

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

Wielkie Dzięki za pomoc, imotov że pracował. BTW, indeksowane dane nie wyglądają tak, jakby były w tej samej strukturze, którą zindeksowaliśmy. Próbowałem cURL http: // localhost: 9200/2012-02-16/_search /? Pretty = true & fields = eventandfactnested.attributes.event_attribute_name & q = matka – Manoj

+0

odpowiedź pokazuje dane jak poniżej, zamiast struktury obiektu. Czy mógłbyś potwierdzić, czy to jest idealne? "eventandfactnested.event_type": ["FamilyRelation", "Quotation", "Quotation", "PersonAttributes", "Quotation", "PersonCareer", "Quotation", "Quotation", "Quotation" "," FamilyRelation "," PersonCareer "," Quotation "," CompanyLocation "," PersonRelation "," Quotation "," Quotation "," Quotation "," Quotation "," PersonEmailAddress "," Quotation "," Quotation ", "Oferta", "PersonCareer", "Oferta", "PersonCareer", "PersonCareer", "Oferta", "Oferta") – Manoj

+0

Manoj, jeśli moja odpowiedź zadziałała, proszę oznaczyć ją jako zaakceptowaną. W ten sposób użytkownicy będą wiedzieć, że to pytanie zostanie odebrane i zwiększy moją ocenę reputacji. Jeśli masz inne pytanie, lepiej będzie dla niego utworzyć nowe pytanie. Komentarze nie działają dobrze w przypadku zadawania pytań i odpowiadania na nie, są po prostu zbyt krótkie. Krótka odpowiedź na twoje drugie pytanie to oryginalny obiekt znajdujący się w polu _source. Długa odpowiedź brzmi: myślę, że twój schemat może nie działać dla ciebie w dłuższej perspektywie. – imotov

Powiązane problemy