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、效果图