ElasticSearch整合springBoot代码

(此系列内容来自狂神说视频)

上一篇创建了springBoot项目,也勾选了一些需要的jar包,这篇主要讲一下使用springboot进行es api的调用。

首先是, 先将esclient的对象交给spring管理,所以创建配置类


import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//spring 两步骤
//1 找对象
//2 放入spring中待用
//3.如果是springBoot 先分析源码
//所有的自动配置叫xxx AutoConfiguration  配置类叫xxxProperties
@Configuration //xml
public class ElasticSearchClientConfig {
    //spring <beans id="方法名" class="返回值">
    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http")));
        return client;
    }

这里可以去看spring-autoconfigure包下找到spring封装的es,一个是data包下的es(我这里的springboot版本是2.5.0)

另有一个就是跟data并列的es

具体这个源码的关系,我还没搞清楚

第二步、下面写下测试类的代码


import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;

@SpringBootTest
class EsApiApplicationTests {
	@Autowired
	private RestHighLevelClient client;
	//测试索引创建
	@Test
	void contextLoads() throws IOException {
		//1.创建索引请求
		CreateIndexRequest indexRequest = new CreateIndexRequest("course");
		//2.客户端执行请求
		CreateIndexResponse createIndexResponse = client.indices().create(indexRequest, RequestOptions.DEFAULT);
		System.out.println(createIndexResponse);
	}

}

然后执行

第三步、去es head里看下有没有创建成功,发现有的,成功了

具体的api测试

1.创建索引

2.判断索引是否存在

3.删除索引

4.创建文档

5.crud文档

上面刚刚写了创建索引的测试,下面写下查询删除索引的测试类

//测试获取索引
	@Test
	void testGetIndex() throws IOException {
		//1.创建索引请求
		GetIndexRequest getIndexRequest = new GetIndexRequest("course1");
		//2.客户端执行请求
		boolean exists = client.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
		System.out.println(exists);
	}
	//测试删除索引
	@Test
	void testDeleteIndex() throws IOException {
		//1.创建索引请求
		DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("course");
		//2.客户端执行请求
		AcknowledgedResponse delete = client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
		System.out.println(delete.isAcknowledged());
	}

 下面是关于文档的测试

//测试添加文档
	@Test
	void testAddDocument() throws IOException {
		//1.创建对象
		User judy = new User("judy", 12);
		//2.创建索引请求
		IndexRequest indexRequest = new IndexRequest("customer");
		//3.设置规则
		indexRequest.id("1").timeout(TimeValue.timeValueSeconds(1));
		//4.将我们的数据放进请求
		indexRequest.source(JSON.toJSONString(judy), XContentType.JSON);
		//5.客户端发送请求,获取响应结果
		IndexResponse index = client.index(indexRequest, RequestOptions.DEFAULT);
		System.out.println(index.toString());
		System.out.println(index.status());

	}

	//测试获取文档,判断是否存在
	@Test
	void testIsExists() throws IOException {
		GetRequest getRequest = new GetRequest("customer", "1");
		//不获取但会的_source的上下文了
		getRequest.fetchSourceContext(new FetchSourceContext(false));
		getRequest.storedFields("name");
		boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
		System.out.println(exists);
	}
	//测试获取文档信息
	@Test
	void testGetDocument() throws IOException {
		GetRequest getRequest = new GetRequest("customer", "1");
		//不获取但会的_source的上下文了
//		getRequest.fetchSourceContext(new FetchSourceContext(false));
		GetResponse documentFields = client.get(getRequest, RequestOptions.DEFAULT);
		System.out.println(documentFields);//返回全部的内容,跟命令式是一样的
		System.out.println(documentFields.getSourceAsString());//打印文档的内容

	}

	//更新文档信息
	@Test
	void testUpdateDocument() throws IOException {
		UpdateRequest  updateRequest = new UpdateRequest("customer", "1");
		updateRequest.timeout("1s");
		User lily = new User("lily2");
		updateRequest.doc(JSON.toJSONString(lily),XContentType.JSON);
		//不获取但会的_source的上下文了
		UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
		System.out.println(update);//返回全部的内容,跟命令式是一样的
		System.out.println(update.status());//打印文档的内容
	}
	//删除文档请求
	@Test
	void testDeleteRequest() throws IOException {
		DeleteRequest deleteRequest = new DeleteRequest("customer", "1");
		deleteRequest.timeout("1s");
		DeleteResponse delete = client.delete(deleteRequest, RequestOptions.DEFAULT);
		System.out.println(delete);
		System.out.println(delete.status());
	}
	//特殊的,真的项目一般会批量插入数据
	@Test
	void testBulkRequest() throws IOException {
		BulkRequest bulkRequest = new BulkRequest();
		bulkRequest.timeout("10s");
		ArrayList<User> userList =new ArrayList<>();
		//批处理请求
		for (int i = 0; i <10; i++) {
			//批量更新和批量删除就在这里修改即可
			bulkRequest.add(new IndexRequest("customer").id(String.valueOf(i+1)).//不写id会默认生成随机id
					source(JSON.toJSONString(new User("钱江"+i+"号",10+i)),XContentType.JSON));
		}
		BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
		System.out.println(bulkResponse.hasFailures());//是否失败,返回false代表成功
	}

	//特殊的,真的项目一般会批量插入数据
//特殊的,真的项目一般会批量插入数据
	//SearchRequest 搜索请求
	//SearchSourceBuilder 条件构造
	//HighLightBuilder 构建高亮
	//TermQueryBuilder 精确查询,中文需要字段.keyword
	//xxx QueryBuilder 对应我们刚刚看到的命令
	@Test
	void testSearch() throws IOException {
		SearchRequest searchRequest =new SearchRequest("customer");

		//构建搜索条件
		SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
		//查询条件,我们可以使用QueryBuilders工具来实现
	//	MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery(); //这个是匹配所有查询
		//以为string类型默认是es的text,term直接查出不来,加上.keyword就可以了,或者手动设置name的类型,添加上keyword类型
		TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name.keyword","钱江2号");
		sourceBuilder.query(termQueryBuilder);
		sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
		searchRequest.source(sourceBuilder);
		SearchResponse search= client.search(searchRequest, RequestOptions.DEFAULT);
		System.out.println(JSON.toJSONString(search.getHits()));
		System.out.println("===================================");
		search.getHits().forEach(hit->{
			System.out.println(hit.getSourceAsMap());
		});
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值