java es mapping 导入_ES之Mapping映射创建

packagees;importorg.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;importorg.elasticsearch.client.AdminClient;importorg.elasticsearch.client.IndicesAdminClient;importorg.elasticsearch.client.transport.TransportClient;importorg.elasticsearch.common.settings.Settings;importorg.elasticsearch.common.transport.InetSocketTransportAddress;importorg.elasticsearch.common.xcontent.XContentBuilder;importorg.elasticsearch.common.xcontent.XContentFactory;importorg.elasticsearch.transport.client.PreBuiltTransportClient;importorg.junit.Before;importorg.junit.Test;importjava.io.IOException;importjava.net.InetAddress;importjava.util.HashMap;public classAdminAPI {private TransportClient client = null;//在所有的测试方法之前执行

@Beforepublic void init() throwsException {//设置集群名称

Settings settings = Settings.builder().put("cluster.name", "bigdata").build();//创建client

client = newPreBuiltTransportClient(settings).addTransportAddresses(new InetSocketTransportAddress(InetAddress.getByName("192.168.33.100"), 9300),new InetSocketTransportAddress(InetAddress.getByName("192.168.33.101"), 9300),new InetSocketTransportAddress(InetAddress.getByName("192.168.33.102"), 9300));

}//创建索引,并配置一些参数

@Testpublic voidcreateIndexWithSettings() {//获取Admin的API

AdminClient admin =client.admin();//使用Admin API对索引进行操作

IndicesAdminClient indices =admin.indices();//准备创建索引

indices.prepareCreate("gamelog")//配置索引参数

.setSettings(//参数配置器

Settings.builder()//指定索引分区的数量

.put("index.number_of_shards", 4)//指定索引副本的数量(注意:不包括本身,如果设置数据存储副本为2,实际上数据存储了3份)

.put("index.number_of_replicas", 2)

)//真正执行

.get();

}//跟索引添加mapping信息(给表添加schema信息)------这种已不使用

@Testpublic voidputMapping() {//创建索引

client.admin().indices().prepareCreate("twitter")//创建一个type,并指定type中属性的名字和类型

.addMapping("tweet","{\n" +

" \"tweet\": {\n" +

" \"properties\": {\n" +

" \"message\": {\n" +

" \"type\": \"string\"\n" +

" }\n" +

" }\n" +

" }\n" +

" }")

.get();

}/*** 你可以通过dynamic设置来控制这一行为,它能够接受以下的选项:

* true:默认值。动态添加字段

* false:忽略新字段

* strict:如果碰到陌生字段,抛出异常

*@throwsIOException*/@Testpublic void testSettingsMappings() throwsIOException {//1:settings

HashMap settings_map = new HashMap(2);

settings_map.put("number_of_shards", 3);

settings_map.put("number_of_replicas", 2);//2:mappings(映射、schema)

XContentBuilder builder =XContentFactory.jsonBuilder()

.startObject()

.field("dynamic", "true")//设置type中的属性

.startObject("properties")//id属性

.startObject("num")//类型是integer

.field("type", "integer")//不分词,但是建索引

.field("index", "not_analyzed")//在文档中存储

.field("store", "yes")

.endObject()//name属性

.startObject("name")//string类型

.field("type", "string")//在文档中存储

.field("store", "yes")//建立索引

.field("index", "analyzed")//使用ik_smart进行分词

.field("analyzer", "ik_smart")

.endObject()

.endObject()

.endObject();

CreateIndexRequestBuilder prepareCreate= client.admin().indices().prepareCreate("user_info");//管理索引(user_info)然后关联type(user)

prepareCreate.setSettings(settings_map).addMapping("user", builder).get();

}/*** XContentBuilder mapping = jsonBuilder()

.startObject()

.startObject("productIndex")

.startObject("properties")

.startObject("title").field("type", "string").field("store", "yes").endObject()

.startObject("description").field("type", "string").field("index", "not_analyzed").endObject()

.startObject("price").field("type", "double").endObject()

.startObject("onSale").field("type", "boolean").endObject()

.startObject("type").field("type", "integer").endObject()

.startObject("createDate").field("type", "date").endObject()

.endObject()

.endObject()

.endObject();

PutMappingRequest mappingRequest = Requests.putMappingRequest("productIndex").type("productIndex").source(mapping);

client.admin().indices().putMapping(mappingRequest).actionGet();*/

/*** index这个属性,no代表不建索引

* not_analyzed,建索引不分词

* analyzed 即分词,又建立索引

* expected [no], [not_analyzed] or [analyzed]

*@throwsIOException*/@Testpublic void testSettingsPlayerMappings() throwsIOException {//1:settings

HashMap settings_map = new HashMap(2);

settings_map.put("number_of_shards", 3);

settings_map.put("number_of_replicas", 1);//2:mappings

XContentBuilder builder =XContentFactory.jsonBuilder()

.startObject()// .field("dynamic", "true")

.startObject("properties")//数据字段

.startObject("id")//字段类型

.field("type", "integer")

.field("store", "yes")

.endObject()

.startObject("name")

.field("type", "string")

.field("index", "not_analyzed")

.endObject()

.startObject("age")

.field("type", "integer")

.endObject()

.startObject("salary")

.field("type", "integer")

.endObject()

.startObject("team")

.field("type", "string")

.field("index", "not_analyzed")

.endObject()

.startObject("position")

.field("type", "string")

.field("index", "not_analyzed")

.endObject()

.startObject("description")

.field("type", "string")

.field("store", "no")

.field("index", "analyzed")

.field("analyzer", "ik_smart")

.endObject()

.startObject("addr")

.field("type", "string")

.field("store", "yes")

.field("index", "analyzed")

.field("analyzer", "ik_smart")

.endObject()

.endObject()

.endObject();//index

CreateIndexRequestBuilder prepareCreate = client.admin().indices().prepareCreate("player_info");//type

prepareCreate.setSettings(settings_map).addMapping("player", builder).get();

}

}

你可能感兴趣的:(java,es,mapping,导入)