2012-04-16 12 views
6

Sto lavorando su ElasticSearch. Qui ho voluto indicizzare una serie di campi di tipo annidati attraverso un API JAVA. Qualcuno potrebbe dare un esempio su questo. Ho provato ancora pochi hanno fallito.Come indicizzare un array di tipo annidato in 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()); 
} 

Dopo l'indicizzazione dei dati, quando ho letto la risposta i dati del campo particolare sembravano

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

risposta

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

Grandi Grazie per l'aiuto imotov, che ha funzionato. A proposito, i dati indicizzati non stanno cercando di essere nella stessa struttura che abbiamo indicizzato. Ho provato il cURL http: // localhost: 9200/2012-02-16/_search /? Pretty = true & fields = eventandfactnested.attributes.event_attribute_name & q = madre – Manoj

+0

risposta sta mostrando i dati come sotto, invece di una struttura dell'oggetto. Potresti confermare se questo è perfetto "eventandfactnested.event_type": ["FamilyRelation", "Quotation", "Quotation", "PersonAttributes", "Quotation", "PersonCareer", "Quotation", "Quotation", "Quotation "," FamilyRelation "," PersonCareer "," Quotation "," CompanyLocation "," PersonRelation "," Quotation "," Quotation "," Quotation "," Quotation "," PersonEmailAddress "," Quotation "," Quotation ", "Offerta", "Persona", "Offerta", "Persona", "Persona", "Offerta", "Offerta" – Manoj

+0

Manoj, se la mia risposta ha funzionato per te, contrassegnala come accettata. In questo modo gli utenti sapranno che questa domanda ha una risposta e aumenterà il mio punteggio di reputazione. Se hai un'altra domanda, sarebbe meglio crearne una nuova. I commenti non funzionano bene per chiedere e rispondere alle domande, sono troppo brevi. La risposta breve alla tua seconda domanda è l'oggetto originale può essere trovato nel campo _source. La lunga risposta è che penso che il tuo schema potrebbe non funzionare per te nel lungo periodo. – imotov

Problemi correlati