java api es_中间件系列之ElasticSearch-3-Java API操作ES

在ES的官方文档中有详细的说明,现整理如下,推荐使用 Java High Level REST Client进行操作。

1.准备工作

引入依赖

以最新的版本为例

org.elasticsearch.client

elasticsearch-rest-high-level-client

7.6.2

复制代码

初始化

填写自己的ES服务端IP即可,如果是集群,则填写多个。

RestHighLevelClient client = new RestHighLevelClient(

RestClient.builder(

new HttpHost("localhost", 9200, "http"),

new HttpHost("localhost", 9201, "http")));

复制代码

使用完毕后,记得关闭

client.close();

复制代码

2.利用RestClient进行基本操作

准备工作

org.springframework.boot

spring-boot-starter-data-elasticsearch

复制代码

需要注意,当前版本,即2.2.6版的spring-boot-starter-data-elasticsearch,集成的ES客户端版本为6.8.7。

9bac70f3c159fa916bb3dc4abf5e0ede.png

如果与实际ES版本不符合,需要在pom.xml中手动指定ES版本,以我使用的ES 7.6.1版本为例

7.6.1

复制代码

注入client

@Configuration

public class ESConfig{

@Bean

public RestHighLevelClient restHighLevelClient(){

return new RestHighLevelClient(

RestClient.builder(

new HttpHost("127.0.0.1", 9200, "http")));

}

}

复制代码

创建Index

@Test

void createIndex() throws IOException{

// 1、创建索引请求

CreateIndexRequest request = new CreateIndexRequest("user1");

// 2、客户端执行请求 IndicesClient,请求后获得响应

CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);

System.out.println(createIndexResponse);

}

复制代码

删除Index

@Test

void testDeleteIndex() throws IOException{

DeleteIndexRequest request = new DeleteIndexRequest("user");

// 删除

AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);

System.out.println(delete.isAcknowledged());

}

复制代码

判断Index存在

@Test

void testExistIndex() throws IOException{

GetIndexRequest request = new GetIndexRequest("user");

boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);

System.out.println(exists);

}

复制代码

创建Document

@Test

void testAddDocument() throws IOException{

//创建对象

User user = new User("张三", 3);

//创建请求

IndexRequest request = new IndexRequest("user");

//规则 put /user/_doc/1

request.id("1");

//设置超时时间

request.timeout(TimeValue.timeValueSeconds(1));

//request.timeout("1s");

//将我们的数据放入请求 json

request.source(JSON.toJSONString(user), XContentType.JSON);

//客户端发送请求 , 获取响应的结果

IndexResponse indexResponse = client.index(request,

RequestOptions.DEFAULT);

System.out.println(indexResponse.toString()); //打印文档的内容

System.out.println(indexResponse.status()); // 对应我们命令返回的状态 ,第一次创建,返回CREATED

}

复制代码

判断Document存在

@Test

void testIsExists() throws IOException{

GetRequest getRequest = new GetRequest("user", "1");

boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);

System.out.println(exists);

}

复制代码

获取Document

@Test

void testGetDocument() throws IOException{

GetRequest getRequest = new GetRequest("user", "1");

GetResponse getResponse = client.get(getRequest,

RequestOptions.DEFAULT);

System.out.println(getResponse.getSourceAsString()); // 打印文档的内容

System.out.println(getResponse); // 返回的全部内容是和命令式一样的

}

复制代码

更新Document

@Test

void testUpdateRequest() throws IOException{

UpdateRequest updateRequest = new UpdateRequest("user", "1");

updateRequest.timeout("1s");

User user = new User("张三", 18);

updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);

UpdateResponse updateResponse = client.update(updateRequest,

RequestOptions.DEFAULT);

System.out.println(updateResponse.status());

}

复制代码

删除Document

@Test

void testDeleteRequest() throws IOException{

DeleteRequest request = new DeleteRequest("user","1");

request.timeout("1s");

DeleteResponse deleteResponse = client.delete(request,

RequestOptions.DEFAULT);

System.out.println(deleteResponse.status());

复制代码

批量插入Document

@Test

void testBulkRequest() throws IOException{

BulkRequest bulkRequest = new BulkRequest();

bulkRequest.timeout("10s");

ArrayList userList = new ArrayList();

userList.add(new User("张三", 3));

userList.add(new User("李四", 3));

userList.add(new User("王五", 3));

for (int i = 0; i < userList.size(); i++) {

// 批量更新和批量删除,就在这里修改对应的请求就可以了

bulkRequest.add(new IndexRequest("user").id("" + (i + 1))

.source(JSON.toJSONString(userList.get(i)), XContentType.JSON));

}

BulkResponse bulkResponse = client.bulk(bulkRequest,

RequestOptions.DEFAULT);

System.out.println(bulkResponse.hasFailures()); // 是否失败,返回fals代表成功

}

复制代码

查询

/*

SearchRequest 搜索请求

SearchSourceBuilder 条件构造

HighlightBuilder 构建高亮

TermQueryBuilder 精确查询

MatchAllQueryBuilder

xxxQueryBuilder 与命令行时的查询类型一一对应*/

@Test

void testSearch() throws IOException{

SearchRequest searchRequest = new SearchRequest("user");

// 构建搜索条件

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

// 查询条件,我们可以使用 QueryBuilders 工具来实现

// QueryBuilders.termQuery 精确

// QueryBuilders.matchAllQuery() 匹配所有

TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name",

"张三");

//MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();

sourceBuilder.query(termQueryBuilder);

sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

searchRequest.source(sourceBuilder);

SearchResponse searchResponse = client.search(searchRequest,

RequestOptions.DEFAULT);

System.out.println(JSON.toJSONString(searchResponse.getHits()));

System.out.println("=================================");

for (SearchHit documentFields : searchResponse.getHits().getHits()) {

System.out.println(documentFields.getSourceAsMap());

}

}

复制代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值