1、AdminAPI.java

package es;import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;import org.elasticsearch.client.AdminClient;import org.elasticsearch.client.IndicesAdminClient;import org.elasticsearch.client.transport.TransportClient;import org.elasticsearch.common.settings.Settings;import org.elasticsearch.common.transport.InetSocketTransportAddress;import org.elasticsearch.common.xcontent.XContentBuilder;import org.elasticsearch.common.xcontent.XContentFactory;import org.elasticsearch.transport.client.PreBuiltTransportClient;import org.junit.Before;import org.junit.Test;import java.io.IOException;import java.net.InetAddress;import java.util.HashMap;public class AdminAPI {private TransportClient client = null;//在所有的测试方法之前执行    @Beforepublic void init() throws Exception {//设置集群名称Settings settings = Settings.builder().put("cluster.name", "bigdata").build();//创建clientclient = new PreBuiltTransportClient(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 void createIndexWithSettings() {//获取Admin的APIAdminClient 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 void putMapping() {//创建索引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:如果碰到陌生字段,抛出异常
     * @throws IOException     */@Testpublic void testSettingsMappings() throws IOException {//1:settingsHashMap<String, Object> settings_map = new HashMap<String, Object>(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]
     * @throws IOException     */@Testpublic void testSettingsPlayerMappings() throws IOException {//1:settingsHashMap<String, Object> settings_map = new HashMap<String, Object>(2);
        settings_map.put("number_of_shards", 3);
        settings_map.put("number_of_replicas", 1);//2:mappingsXContentBuilder 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();//indexCreateIndexRequestBuilder prepareCreate = client.admin().indices().prepareCreate("player_info");//typeprepareCreate.setSettings(settings_map).addMapping("player", builder).get();

    }
}

2、效果图

ES之Mapping映射创建_Mapping