ETJava Beta | Java    注册   登录
  • elasticsearch 创建索引

    发表于 2024-04-07 18:12:22     阅读(199)     博客类别:Elasticsearch

    elasticsearch 创建索引

    ElasticSearch客户端提供了多种方式的数据创建方式,包括json串,map,
    内置工具;我们一般用json格式,借助json工具框架,比如gson ,json-lib,fastjson等等
    这里我们使用junit做测试 因此需要添加junit依赖

    添加Junit依赖

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>

    创建索引案例

    package com.et.connection;
    
    import com.google.gson.JsonObject;
    import org.elasticsearch.action.delete.DeleteResponse;
    import org.elasticsearch.action.get.GetResponse;
    import org.elasticsearch.action.index.IndexResponse;
    import org.elasticsearch.action.update.UpdateResponse;
    import org.elasticsearch.client.transport.TransportClient;
    import org.elasticsearch.common.settings.Settings;
    import org.elasticsearch.common.transport.TransportAddress;
    import org.elasticsearch.common.xcontent.XContentFactory;
    import org.elasticsearch.common.xcontent.XContentType;
    import org.elasticsearch.transport.client.PreBuiltTransportClient;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @Author: ETJAVA
     * @CreateTime: 2024-04-07  16:55
     * @Description: TODO java接口连接elasticsearch 创建索引的几种方式
     * @Version: 1.0
     */
    public class CreateIndexTest {
    
        private static String host="192.168.199.126";
        private static int port=9300; // 程序连接的端口
    
        private TransportClient client=null;
    
    
        // 获取连接
        @Before
        public void getClient() throws UnknownHostException {
            client = new PreBuiltTransportClient(Settings.EMPTY)
                    .addTransportAddress(new TransportAddress(InetAddress.getByName(CreateIndexTest.host), CreateIndexTest.port));
        }
    
        // 关闭连接
        @After
        public void closeClient(){
            if(client!=null){
                client.close();
            }
        }
    
        /**
         * 创建索引 方式1 官方提供 直接添加
         */
        @Test
        public void testIndex1()throws Exception{
            IndexResponse response =client.prepareIndex("twitter", "tweet", "1")
                    .setSource(XContentFactory.jsonBuilder()
                            .startObject()
                            .field("user", "Tom")
                            .field("postDate", new Date())
                            .field("message", "I have a good friend named Jerry.")
                            .endObject()
                    ).get();
            System.out.println("索引名称:"+response.getIndex());
            System.out.println("类型:"+response.getType());
            System.out.println("文档ID:"+response.getId()); // 第一次使用是1
            System.out.println("当前实例状态:"+response.status());
        }
    
        /*
        * 创建索引方式2 - json字符串封装数据
        * */
        @Test
        public void testIndex2()throws Exception{
            String json = "{" +
                    "\"user\":\"Tom\"," +
                    "\"postDate\":\"2013-01-30\"," +
                    "\"message\":\"I have a good friend named Jerry.\"" +
                    "}";
    
            IndexResponse response =client.prepareIndex("weibo", "tweet")
                    .setSource(json,XContentType.JSON)
                    .get();
            System.out.println("索引名称:"+response.getIndex());
            System.out.println("类型:"+response.getType());
            System.out.println("文档ID:"+response.getId()); // 第一次使用是1
            System.out.println("当前实例状态:"+response.status());
        }
    
        /*
        * 创建索引方式3 Map格式
        * */
        @Test
        public void testIndex3()throws Exception{
            Map<String, Object> json = new HashMap<String, Object>();
            json.put("user","Tom");
            json.put("postDate",new Date());
            json.put("message","I have a good friend named Jerry.");
    
            IndexResponse response =client.prepareIndex("tom", "tweet")
                    .setSource(json)
                    .get();
            System.out.println("索引名称:"+response.getIndex());
            System.out.println("类型:"+response.getType());
            System.out.println("文档ID:"+response.getId()); // 第一次使用是1
            System.out.println("当前实例状态:"+response.status());
        }
    
        /*
        * 创建索引 方式4 json格式
        * */
        @Test
        public void testIndex4()throws Exception{
            // 定义要添加的数据
            JsonObject jsonObject = new JsonObject();
            jsonObject.addProperty("name","Java");
            jsonObject.addProperty("publishDate","2001-01-01");
            jsonObject.addProperty("price",99.98);
            // 添加索引 如果不指定ID 会自动生成一个字符串的ID
            IndexResponse indexResponse = client.prepareIndex("book", "java", "1") // 定义索引的位置和id
                    .setSource(jsonObject.toString(), XContentType.JSON) // 添加值
                    .get();// 获取返回值
    
            System.out.println("索引名称:"+indexResponse.getIndex());
            System.out.println("文档类型:"+indexResponse.getType());
            System.out.println("文档ID:"+indexResponse.getId());
            System.out.println("当前实例的状态:"+indexResponse.status());// 创建为CREATED
        }
    }