165Elasticsearch 基础入门--开发elasticsearch添加数据篇

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 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 基础入门--开发elasticsearch添加数据篇)