最近在学习es的理论知识以及实际操作,随时更新~
概要:首先你得有1w条数据的json,然后用java读取json文件导入
一. 创建Json数据
首先我生成1.5w条数据,是为了实践分页查询,用from-size和scroll翻页去实践
生成四个字段,name、age、sex、telephone
代码如下:可直接复制粘贴用
package es;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;
/**
* 生成1.5W条json数据
*/
public class JsonGenerator {
public static void main(String[] args) {
int numberOfRecords = 15000;
String outputFile = "user.json";
try (FileWriter writer = new FileWriter(outputFile)) {
for (int i = 0; i < numberOfRecords; i++) {
writer.write(generateJsonRecord());
if (i < numberOfRecords - 1) {
writer.write(",");
} else {
writer.write(" ");
}
}
System.out.println("Generated " + numberOfRecords + " records successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
private static String generateJsonRecord() {
String name = generateRandomName();
int age = generateRandomAge();
String sex = generateRandomSex();
String telephone = generateRandomTelephone();
return "{\"name\":\"" + name + "\",\"age\":\"" + age + "\",\"sex\":\"" + sex + "\",\"telephone\":\"" + telephone + "\"}";
}
private static String generateRandomName() {
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
StringBuilder sb = new StringBuilder();
Random random = new Random();
for (int i = 0; i < 5; i++) {
sb.append(characters.charAt(random.nextInt(characters.length())));
}
return sb.toString();
}
private static int generateRandomAge() {
Random random = new Random();
return random.nextInt(65) + 18; // Generate age between 18 and 65
}
private static String generateRandomSex() {
Random random = new Random();
return random.nextBoolean() ? "Male" : "Female";
}
private static String generateRandomTelephone() {
StringBuilder sb = new StringBuilder();
Random random = new Random();
for (int i = 0; i < 10; i++) {
sb.append(random.nextInt(10)); // Append random digit to the telephone number
}
sb.append("-");
for (int i = 0; i < 3; i++) {
sb.append(random.nextInt(10)); // Append random digit to the telephone number
}
return sb.toString();
}
}
生成的文件在该位置上:
二.bulk 批量导入数据
public class EsConnectionExample {
public static void main(String[] args) throws IOException {
// 创建客户端
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("ip", port, "http"))); // 修改为你的ES地址和端口
//bulk 导入
//这块改成你的文件的地址
try (BufferedReader reader = new BufferedReader(new FileReader("user.json"))) {
String line;
// 构造 BulkRequest 对象并添加要导入的文档
BulkRequest request = new BulkRequest();
while ((line = reader.readLine()) != null) {
XContentBuilder builder = XContentFactory.jsonBuilder()
.startObject()
.field("name", line)
.field("age", line)
.field("sex" , line)
.field("telephone", line)
.endObject();
//这块改成你的索引名字
IndexRequest indexRequest = new IndexRequest("my_index")
.source(builder);
request.add(indexRequest);
}
// 发送 BulkRequest 请求
BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);
if (response.hasFailures()) {
System.out.println("Failed to import documents.");
} else {
System.out.println("Documents imported successfully!");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭 ElasticSearch 客户端连接
client.close();
}
}
}
此时已经插入了