0

I am using java and Jest (https://github.com/searchbox-io/Jest) as a client for elastic search cluster. Trying to create and index with the below structure in http://localhost:9200/myindex/mytype

{
  "doc": {
    "_content": "mycontent",
    "_name": "mypdf.pdf",
    "_content_type": "application/pdf"
  }
}
And below is my java code,
 XContentBuilder docObject = jsonBuilder().startObject().field("_content", doc).field("_name", name).field("_content_type", contentType)
                .field("title", title).field("author", author).endObject();
        index1 = new Index.Builder(docObject).build();
        source = jsonBuilder()
                .startObject()
                .field("doc", docObject.string())
                .endObject().string();
 Index index = new Index.Builder(source).index(baseIndexName).type(ElasticConstants.BASE_TYPE).build();

But when this gets executed , the source is not passed as a Json and value for the key "doc" is passed as a string literal because of which the index is not getting created . How do I pass nested json objects to the Index.Builder using Jest ?

Nkosi
  • 235,767
  • 35
  • 427
  • 472
manu bhat
  • 61
  • 11

1 Answers1

0
    //Instantiate JEST Client
    JestClientFactory factory = new JestClientFactory();
    HttpClientConfig config = new HttpClientConfig.
            Builder("http://localhost:9201")
            .multiThreaded(true).build();
    factory.setHttpClientConfig(config);
    JestClient jestClient = factory.getObject();

    //create index
    jestClient.execute(new CreateIndex.Builder("so4index").build());




    //create index mapping
    RootObjectMapper.Builder rootObjMapBuilder1 = new RootObjectMapper.Builder("so1type");
    RootObjectMapper.Builder rootObjMapBuilder = new RootObjectMapper.Builder("doc");   
    rootObjMapBuilder.add(new StringFieldMapper.Builder("_content").store(true));
    rootObjMapBuilder.add(new StringFieldMapper.Builder("_name").store(true));
    rootObjMapBuilder.add(new StringFieldMapper.Builder("_content_type").store(true));
    rootObjMapBuilder1.add(rootObjMapBuilder);

    DocumentMapper docMapper = new DocumentMapper.Builder("so4index", null, rootObjMapBuilder1).build(null);
    String source = docMapper.mappingSource().toString();


    PutMapping putMapping = new PutMapping.Builder("so4index", "so1type", source).build();

    JestResult mappingResult = jestClient.execute(putMapping);

    //Insert Document Content
    String doc="mycontent";
    String name="mypdf.pdf";
    String contentType = "application/pdf";
    XContentBuilder docObject = jsonBuilder()
            .startObject()
            .startObject("doc").field("_content", doc)
            .field("_name", name)
            .field("_content_type", contentType)
            .endObject()
            .endObject();

   Index index = new Index.Builder(docObject.string()).index("so4index").type("so1type").build();
   JestResult jestResult= jestClient.execute(index);


   jestClient.shutdownClient();
DecKno
  • 293
  • 1
  • 5
  • 21