使用JSON模式和ElasticSearch Java API添加类型映射

Cen*_*giz 5 java elasticsearch

是否可以使用模式使用Java API mapping向ElasticSearch 添加类型?IndexJSON

我知道ElasticSearch使用第一个文档来创建一个mapping,因此我可以使用json模式增强我的第一个文档.但我想在索引文档之前创建类型.

dad*_*net 5

你可以这样做:

String mapping = XContentFactory.jsonBuilder().startObject().startObject(typeName).startObject("properties")
                    .startObject("location").field("type", "geo_point").endObject()
                    .startObject("language").field("type", "string").field("index", "not_analyzed").endObject()
                    .startObject("user").startObject("properties").startObject("screen_name").field("type", "string").field("index", "not_analyzed").endObject().endObject().endObject()
                    .startObject("mention").startObject("properties").startObject("screen_name").field("type", "string").field("index", "not_analyzed").endObject().endObject().endObject()
                    .startObject("in_reply").startObject("properties").startObject("user_screen_name").field("type", "string").field("index", "not_analyzed").endObject().endObject().endObject()
                    .startObject("retweet").startObject("properties").startObject("user_screen_name").field("type", "string").field("index", "not_analyzed").endObject().endObject().endObject()
                    .endObject().endObject().endObject().string();
client.admin().indices().preparePutMapping(indexName).setType(typeName).setSource(mapping).execute().actionGet();
Run Code Online (Sandbox Code Playgroud)

或者,如果您将映射作为字符串

String json = "{}";
PutMappingResponse response = client.admin().indices()
                    .preparePutMapping(index)
                    .setType(type)
                    .setSource(json)
                    .execute().actionGet();     
Run Code Online (Sandbox Code Playgroud)