首页 > 编程语言 >ElasticSearch Java API之文档操作

ElasticSearch Java API之文档操作

时间:2022-11-09 15:03:47浏览次数:60  
标签:API Java request System client ElasticSearch println new response


文档Document简单介绍

被索引的一条数据,索引的基本信息单元,以JSON格式来表示。

比如:你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以 JSON(Javascript Object Notation)格式来表示, JSON数据适合互联网数据交互。

在一个 index/type 里面,你可以存储任意多的文档。

文档对象

新建一个User类,好插入数据到ElasticSearch 中

@Data
public class User {
private String name;
private int age;
private String sex;
}

因为使用了lombok的@Data注解来自动生成setter/getter、equals、canEqual、hashCode、toString方法,所以我们要在pom.xml文件中引入如下依赖

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>

插入文档

static void insertDocument(RestHighLevelClient client) throws JsonProcessingException {

// 新增文档 - 请求对象
IndexRequest request = new IndexRequest();
// 设置索引及唯一性标识
request.index("userxt").id("1");

// 创建数据对象
User user = new User();
user.setName("xt");
user.setAge(24);
user.setSex("男");

ObjectMapper objectMapper = new ObjectMapper();
//可能会抛出JsonProcessingException异常
String productJson = objectMapper.writeValueAsString(user);

// 添加文档数据,数据格式为 JSON 格式
request.source(productJson, XContentType.JSON);
// 客户端发送请求,获取响应对象
IndexResponse response = null;
try {
response = client.index(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
//3.打印结果信息
System.out.println("_index:" + response.getIndex());
System.out.println("_id:" + response.getId());
System.out.println("_result:" + response.getResult());
}

调用结果

ElasticSearch Java API之文档操作_elasticsearch


ElasticSearch Head 插件可以看见插入到指定索引的数据

ElasticSearch Java API之文档操作_客户端_02

修改文档

static void alterDocument(RestHighLevelClient client) throws IOException {
// 修改文档 - 请求对象
UpdateRequest request = new UpdateRequest();
// 配置修改参数
request.index("userxt").id("1");
// 设置请求体,对数据进行修改
request.doc(XContentType.JSON, "age", 20);
// 客户端发送请求,获取响应对象 抛出IOException
UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
System.out.println("_index:" + response.getIndex());
System.out.println("_id:" + response.getId());
System.out.println("_result:" + response.getResult());
}

调用结果

ElasticSearch Java API之文档操作_elasticsearch_03


ElasticSearch Head 插件显示

ElasticSearch Java API之文档操作_json_04

查询文档

static void queryDocument(RestHighLevelClient client){
//1.创建请求对象
GetRequest request = new GetRequest().index("userxt").id("1");
//2.客户端发送请求,获取响应对象
GetResponse response = null;
try {
response = client.get(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
//3.打印结果信息
System.out.println("_index:" + response.getIndex());
System.out.println("_type:" + response.getType());
System.out.println("_id:" + response.getId());
System.out.println("_source:" + response.getSourceAsString());
}

ElasticSearch Java API之文档操作_数据_05

删除文档

static void deleteDocument(RestHighLevelClient client) throws IOException {
//创建请求对象
DeleteRequest request = new DeleteRequest().index("userxt").id("1");
//客户端发送请求,获取响应对象 抛出IOException
DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
//打印信息
System.out.println(response.toString());
}

ElasticSearch Java API之文档操作_数据_06


ElasticSearch Head 插件显示

ElasticSearch Java API之文档操作_客户端_07

批量插入文档

static void batchInsertDocument(RestHighLevelClient client) throws IOException {
//创建批量新增请求对象
BulkRequest request = new BulkRequest();
request.add(new
IndexRequest().index("userxt").id("2").source(XContentType.JSON, "name",
"java"));
request.add(new
IndexRequest().index("user").id("3").source(XContentType.JSON, "name",
"python"));
request.add(new
IndexRequest().index("user").id("4").source(XContentType.JSON, "name",
"go"));
//客户端发送请求,获取响应对象
BulkResponse responses = client.bulk(request, RequestOptions.DEFAULT);
//打印结果信息
System.out.println("took:" + responses.getTook());
System.out.println("items:" + responses.getItems());
}

ElasticSearch Java API之文档操作_客户端_08


ElasticSearch Head 插件显示

ElasticSearch Java API之文档操作_json_09

批量删除文档

static void batchDeleteDocument(RestHighLevelClient client) throws IOException {
//创建批量删除请求对象
BulkRequest request = new BulkRequest();
request.add(new DeleteRequest().index("userxt").id("2"));
request.add(new DeleteRequest().index("userxt").id("3"));
request.add(new DeleteRequest().index("userxt").id("4"));
//客户端发送请求,获取响应对象
BulkResponse responses = client.bulk(request, RequestOptions.DEFAULT);
//打印结果信息
System.out.println("took:" + responses.getTook());
System.out.println("items:" + responses.getItems());
}

ElasticSearch Java API之文档操作_客户端_10


ElasticSearch Head 插件显示

ElasticSearch Java API之文档操作_客户端_11

全部代码

//对elasticsearch的文档进行一系列操作
public class DocumentOperation {

public static void main(String[] args) throws IOException {

final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials("xt", "xt"));


RestClientBuilder restClientBuilder = RestClient.builder(
new HttpHost("IP", 9200,"http"));

// 认证和线程数
restClientBuilder.setHttpClientConfigCallback(httpClientBuilder -> {
httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
int threadCount = 10;
httpClientBuilder.setDefaultIOReactorConfig(IOReactorConfig.custom().setIoThreadCount(threadCount).build());

return httpClientBuilder;
});

// 超时超时设置
restClientBuilder.setRequestConfigCallback(requestConfigCallback -> {
requestConfigCallback.setConnectTimeout(10000); //单位ms
requestConfigCallback.setSocketTimeout(10000);
return requestConfigCallback;
});


// 创建客户端对象 虽然已经被弃用,但是了解基本使用还是没有问题 里面封装了RestClient
RestHighLevelClient client = new RestHighLevelClient(restClientBuilder);

System.out.println(client);
//插入文档
insertDocument(client);
//修改文档
alterDocument(client);
//查询文档
queryDocument(client);
//删除文档
deleteDocument(client);
// 批量插入文档
batchInsertDocument(client);
// 批量删除文档
batchDeleteDocument(client);


// 关闭客户端连接
client.close();

}


static void insertDocument(RestHighLevelClient client) throws JsonProcessingException {

// 新增文档 - 请求对象
IndexRequest request = new IndexRequest();
// 设置索引及唯一性标识
request.index("userxt").id("1");

// 创建数据对象
User user = new User();
user.setName("xt");
user.setAge(24);
user.setSex("男");

ObjectMapper objectMapper = new ObjectMapper();
//可能会抛出JsonProcessingException异常
String productJson = objectMapper.writeValueAsString(user);

// 添加文档数据,数据格式为 JSON 格式
request.source(productJson, XContentType.JSON);
// 客户端发送请求,获取响应对象
IndexResponse response = null;
try {
response = client.index(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
//3.打印结果信息
System.out.println("_index:" + response.getIndex());
System.out.println("_id:" + response.getId());
System.out.println("_result:" + response.getResult());
}


static void alterDocument(RestHighLevelClient client) throws IOException {
// 修改文档 - 请求对象
UpdateRequest request = new UpdateRequest();
// 配置修改参数
request.index("userxt").id("1");
// 设置请求体,对数据进行修改
request.doc(XContentType.JSON, "age", 20);
// 客户端发送请求,获取响应对象 抛出IOException
UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
System.out.println("_index:" + response.getIndex());
System.out.println("_id:" + response.getId());
System.out.println("_result:" + response.getResult());
}

static void queryDocument(RestHighLevelClient client){
//1.创建请求对象
GetRequest request = new GetRequest().index("userxt").id("1");
//2.客户端发送请求,获取响应对象
GetResponse response = null;
try {
response = client.get(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
//3.打印结果信息
System.out.println("_index:" + response.getIndex());
System.out.println("_type:" + response.getType());
System.out.println("_id:" + response.getId());
System.out.println("_source:" + response.getSourceAsString());
}

static void deleteDocument(RestHighLevelClient client) throws IOException {
//创建请求对象
DeleteRequest request = new DeleteRequest().index("userxt").id("1");
//客户端发送请求,获取响应对象 抛出IOException
DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
//打印信息
System.out.println(response.toString());
}


static void batchInsertDocument(RestHighLevelClient client) throws IOException {
//创建批量新增请求对象
BulkRequest request = new BulkRequest();
request.add(new
IndexRequest().index("userxt").id("2").source(XContentType.JSON, "name",
"java"));
request.add(new
IndexRequest().index("userxt").id("3").source(XContentType.JSON, "name",
"python"));
request.add(new
IndexRequest().index("userxt").id("4").source(XContentType.JSON, "name",
"go"));
//客户端发送请求,获取响应对象
BulkResponse responses = client.bulk(request, RequestOptions.DEFAULT);
//打印结果信息
System.out.println("took:" + responses.getTook());
System.out.println("items:" + responses.getItems());
}


static void batchDeleteDocument(RestHighLevelClient client) throws IOException {
//创建批量删除请求对象
BulkRequest request = new BulkRequest();
request.add(new DeleteRequest().index("userxt").id("2"));
request.add(new DeleteRequest().index("userxt").id("3"));
request.add(new DeleteRequest().index("userxt").id("4"));
//客户端发送请求,获取响应对象
BulkResponse responses = client.bulk(request, RequestOptions.DEFAULT);
//打印结果信息
System.out.println("took:" + responses.getTook());
System.out.println("items:" + responses.getItems());
}
}

(写博客主要是对自己学习的归纳整理,资料大部分来源于书籍、网络资料、官方文档和自己的实践,整理的不足和错误之处,请大家评论区批评指正。同时感谢广大博主和广大作者辛苦整理出来的资源和分享的知识。)


标签:API,Java,request,System,client,ElasticSearch,println,new,response
From: https://blog.51cto.com/u_14020077/5836609

相关文章