无法使用Jest弹性客户端创建具有嵌套json的索引

时间:2015-12-17 06:12:43

标签: elasticsearch jest

我使用java和Jest(https://github.com/searchbox-io/Jest)作为弹性搜索集群的客户端。 尝试使用http://localhost:9200/myindex/mytype

中的以下结构创建和索引

 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();
以下是我的java代码,

{{1}}

但是当执行此操作时,源不会作为Json传递,并且键“doc”的值将作为字符串文字传递,因为没有创建索引。如何使用Jest将嵌套的json对象传递给Index.Builder?

1 个答案:

答案 0 :(得分: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();