美文网首页
165Elasticsearch 基础入门--开发elastic

165Elasticsearch 基础入门--开发elastic

作者: Jachin111 | 来源:发表于2021-09-25 11:46 被阅读0次

    elasticsearch 简介

    通过调用 Es java api 后与 Es 服务交互,Es 将数据散布到多个物理 Lucene 索引上,这些 Lucene 索引称为分片,es 默认是 5 个分片,如果是集群状态分片将会分配到多个节点上。

    java 创建 elasticsearch 数据

    查看添加数据前的数据
    1.确认 Es 服务开启。
    2.打开浏览器访问 http://127.0.0.1:9200/_plugin/head

    image.png
    查看我们上节课创建的 userInfo,此时为空。
    在com.syl.es 下,新建 AddData 类
    image.png
    编写添加数据的方法
    package com.syl.es;
    
    import java.net.InetAddress;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.elasticsearch.action.bulk.BulkRequestBuilder;
    import org.elasticsearch.action.bulk.BulkResponse;
    import org.elasticsearch.client.Client;
    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;
    
    public class AddData {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            //调用添加数据方法
            add();
        }
    
        /**
         * 添加索引数据
         */
        public static void add(){
            //索引服务的地址
            String elasticServer= "127.0.0.1";
            //索引服务的端口
            Integer elasticServerPort = 9300;
            Client client=null;
            try{
                //初始化连接
                Settings settings = Settings.settingsBuilder()
                             .build();
                client = TransportClient.builder().settings(settings).build()
                            .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(elasticServer), elasticServerPort));
                BulkRequestBuilder bulkRequest = client.prepareBulk();
                //设置字段的值
                 XContentBuilder docBuilder = XContentFactory.jsonBuilder().startObject();
                 docBuilder.field("name", "张中国");
                docBuilder.field("nickname", "张中");
                docBuilder.field("nativeplace", "上海静安寺");
                docBuilder.field("address", "上海静安寺1街坊10栋");
                docBuilder.field("birthdate", "1980-02-14");
                //添加索引数据并且设置id为1
                 bulkRequest.add(client.prepareIndex("user", "userInfo", "1")
                          .setSource(docBuilder));
                BulkResponse bulkResponse = bulkRequest.execute().actionGet();
                System.out.println(bulkResponse.hasFailures());
                //判断添加是否成功
                if (bulkResponse.hasFailures()) {
                   System.out.println("error!!!");
                }
                //关闭连接
                client.close();
             }catch (Exception e) {
                    e.printStackTrace();
             }
             System.out.println("do end!!");
        }
    }
    

    以 Java Application 的方式,运行AddData.java文件。
    注:实验楼在线环境暂时不支持中文复制粘贴,请下载前面给出的项目文件中复制粘贴中文。或者使用英文,我们的目的是学会如何使用。而不是纠结中文英文。
    访问 head 查看创建的数据

    image.png
    通过点击数据浏览,点击左侧 userInfo 可以看到数据已经创建成功。

    批量创建 elasticsearch 数据

    创建 batchAdd 方法
    在AddData.java中添加函数,请根据编辑报错,解决 Import 报错。

        /**
         * 批量添加索引数据
         */
       public static void batchAdd (){
            //初始化数据
            List dataList = new ArrayList();
            Map dataMap1=new HashMap();
            dataMap1.put("name","张中国1");
            dataMap1.put("nickname", "张中1");
            dataMap1.put("nativeplace", "上海静安寺1");
            dataMap1.put("address", "上海静安寺1街坊10栋1");
            dataMap1.put("birthdate", "1980-02-15");
    
            Map dataMap2=new HashMap();
            dataMap2.put("name","张中国2");
            dataMap2.put("nickname", "张中2");
            dataMap2.put("nativeplace", "上海静安寺2");
            dataMap2.put("address", "上海静安寺1街坊10栋2");
            dataMap2.put("birthdate", "1980-02-16");
            dataList.add(dataMap1);
            dataList.add(dataMap2);
            //索引服务的地址
            String elasticServer= "127.0.0.1";
            //索引服务的端口
            Integer elasticServerPort = 9300;
            Client client=null;
            try{
                //初始化连接
                Settings settings = Settings.settingsBuilder().build();
                client = TransportClient.builder().settings(settings).build()
                         .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(elasticServer), elasticServerPort));
                BulkRequestBuilder bulkRequest = client.prepareBulk();
                int y=dataList.size();
                //添加数据
                for(int i=0;i<y;i++){
                    Map<String, Object> m = (Map)dataList.get(i);
                    bulkRequest.add(client.prepareIndex("user", "userInfo", i+2+"")
                         .setSource(m));
                    if (i % 10000 == 0) {
                        bulkRequest.execute().actionGet();
                    }
                }
                bulkRequest.execute().actionGet();
                //关闭连接
                client.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println("do end!!");
        }
    

    代码中模拟实际项目构造多条 list 数据,list 中放 map 类型的数据,并通过循环批量添加并且每 1 万条数据添加一次。
    修改主函数,调用删除索引函数
    注释掉创建单条 elasticsearch 数据函数的调用,增加调用批量创建 elasticsearch 数据。

     public static void main(String[] args) {
            //添加数据
            // add();
            //批量添加数据
            batchAdd();
        }
    

    运行代码
    以 Java Application 的方式,运行AddData.java文件。
    查看数据添加情况

    image.png
    点击数据浏览在点击类型 userInfo 我们可以看到已经有 3 条数据添加进去了。
    拓展:大家可以试试如果 id 相同添加后是什么效果?

    相关文章

      网友评论

          本文标题:165Elasticsearch 基础入门--开发elastic

          本文链接:https://www.haomeiwen.com/subject/egbagltx.html