我使用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();
{{1}}
但是当执行此操作时,源不会作为Json传递,并且键“doc”的值将作为字符串文字传递,因为没有创建索引。如何使用Jest将嵌套的json对象传递给Index.Builder?
答案 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();