elasticsearch 简介
通过调用 Es java api 后与 Es 服务交互,Es 将数据散布到多个物理 Lucene 索引上,这些 Lucene 索引称为分片,es 默认是 5 个分片,如果是集群状态分片将会分配到多个节点上。
java 创建 elasticsearch 数据
查看添加数据前的数据
1.确认 Es 服务开启。
2.打开浏览器访问 http://127.0.0.1:9200/_plugin/head
查看我们上节课创建的 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 查看创建的数据
通过点击数据浏览,点击左侧 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文件。
查看数据添加情况
点击数据浏览在点击类型 userInfo 我们可以看到已经有 3 条数据添加进去了。
拓展:大家可以试试如果 id 相同添加后是什么效果?
网友评论