0

エラスティック検索クラスターのクライアントとしてJava と Jest ( https://github.com/searchbox-io/Jest ) を使用しています。http://localhost:9200/myindex/mytypeで以下の構造を作成してインデックスを作成しようとしています

{
  "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 に渡すにはどうすればよいですか?

4

1 に答える 1

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();
于 2015-12-17T13:47:34.930 に答える