2015-12-17 61 views
0

我正在使用java和Jest(https://github.com/searchbox-io/Jest)作爲彈性搜索集羣的客戶端。 試圖在http://localhost:9200/myindex/mytype無法使用Jest彈性客戶端創建具有嵌套json的索引

{ 
 
    "doc": { 
 
    "_content": "mycontent", 
 
    "_name": "mypdf.pdf", 
 
    "_content_type": "application/pdf" 
 
    } 
 
}
創建和指數與下方結構,下面是我的Java代碼,

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

但是,當這個執行後,源不作爲JSON傳遞並且鍵「doc」的值作爲字符串文字傳遞,因爲索引沒有被創建。如何使用Jest將嵌套的json對象傳遞給Index.Builder?

回答

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(); 
相關問題