文章目录
学习步骤:找官方文档进行查看 官网
ElasticSearch客户端
7.1、找官网文档
- 找到原生的依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.9.2</version>
</dependency>
- 找对象
- 分析这个类中的方法
- 新建一个SpringBoot项目
7.2、配置基本的项目
一定要保证,我们的导入的依赖和我们的es版本一致
- 本地es版本
7.3、测试API
前提:
- 在config目录下编写ElasticSearchConfig,将其注入到spring容器中
@Configuration //相当于xml文件
public class ElasticSearchClientConfig {
// Spring两步骤 1. 找对象 2. 放到spring中待用
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("127.0.0.1", 9200, "http")));
return client;
}
}
- 在SpringBoot自带的测试类中进行测试
@SpringBootTest
class SpringbootEsApiApplicationTests {
@Autowired
@Qualifier("restHighLevelClient")
private RestHighLevelClient client ;
// ......
}
7.3.1、创建索引
// 创建索引 Request
@Test
void testCreateIndex() throws IOException {
// 创建索引请求
CreateIndexRequest request = new CreateIndexRequest("jl_index");
// 客户端执行请求 IndicesClient
// RequestOptions.DEFAULT 默认参数
CreateIndexResponse createIndexResponse =
client.indices().create(request, RequestOptions.DEFAULT);
}
7.3.2、判断索引是否存在
// 获取索引,判断索引是否存在
@Test
void testExistIndex() throws IOException {
// 获取索引请求
GetIndexRequest request = new GetIndexRequest("jl_index");
// 判断是否存在
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
System.out.println(exists); // true存在
}
7.3.3、删除索引
// 删除索引,判断索引是否存在
@Test
void testDeleteIndex() throws IOException {
// 删除索引请求
DeleteIndexRequest request = new DeleteIndexRequest("jl_index");
AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
// 查看是否成功删除
System.out.println(delete.isAcknowledged());
}
-------------------------------------创建文档时需要实体类(对象)----------------------------------------------
创建User实体类
@Component // 注入到Spring容器中
public class User {
private String name;
private Integer age;
// Getter/Setter/toString
}
7.3.4、创建文档
es中数据都是JSON格式的,User对象不能直接放入请求,所以user对象需要转化为JSON字符串,所以需要导入fastjson依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
创建文档
// 创建文档
@Test
void testAddDocument() throws IOException {
// 创建对象
User user = new User("jl",21);
// 创建请求
IndexRequest request = new IndexRequest("jl_index");
// 规则 put/jl_index/_doc/1
request.id("1");
// 超时设置, 也可以是request.timeout("1s");
request.timeout(TimeValue.timeValueSeconds(1));
// 将我们的数据放入请求 所有的数据都是JSON数据
// 所以需要将对象转化为JSON字符串
IndexRequest source = 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
}
7.3.5、获取文档,判断是否存在
// 获取文档,判断是否存在
@Test
void testIsExists() throws IOException {
GetRequest getRequest = new GetRequest("jl_index","1");
boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
System.out.println(exists);
}
7.3.6、获取文档信息
// 获取文档信息
@Test
void testDetDocument() throws IOException {
GetRequest getRequest = new GetRequest("jl_index", "1");
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
// 输出文档的内容
System.out.println(getResponse.getSourceAsString());
System.out.println(getResponse); // 返回全部内容和命令是一样的
}
7.3.7、更新文档的信息
// 更新文档的信息
@Test
void testUpdateDocument() throws IOException {
UpdateRequest updateRequest = new UpdateRequest("jl_index", "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());
}
7.3.8、删除文档
// 删除文档
@Test
void testDeleteDocument() throws IOException {
DeleteRequest deleteRequest = new DeleteRequest("jl_index", "1");
deleteRequest.timeout("1s");
DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);
System.out.println(deleteResponse.status());
}
7.3.9、批量插入数据
// 真实项目中一般都会批量插入数据
@Test
void testBulkRequest() throws IOException {
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("10s");
ArrayList<User> userList = new ArrayList<>();
userList.add(new User("jl1",20));
userList.add(new User("jl2",20));
userList.add(new User("jl3",20));
userList.add(new User("zs1",21));
userList.add(new User("zs2",22));
userList.add(new User("zs3",20));
// 批处理请求
for (int i = 0; i < userList.size(); i++) {
// 批量更新和批量删除,就在这里修改对应的请求
bulkRequest.add(new IndexRequest("jl_index")
.id("" +(i+1))
.source(JSON.toJSONString(userList.get(i)),XContentType.JSON));
}
BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
// 查看是否失败 false代表没有失败
System.out.println(bulkResponse.hasFailures());
}
7.3.10、查询数据
重点:
- 搜索请求SearchRequest
- 条件构造SearchSourceBuilder
- 构建高亮highlightBuilder
- 精确查询TermQueryBuilder
- 查询全部MatchAllQueryBuilder
- 基本都是xxx QueryBuilder 对应我们看到的命令
// 查询
@Test
void testSearch() throws IOException {
SearchRequest searchRequest = new SearchRequest("jl_index");
// 构建搜索条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// 查询条件, 我们可以使用 QueryBuilders 工具来实现
// QueryBuilders.termQuery 精确查询
// QueryBuilders.matchAllQuery() 匹配所有
// TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "jl1");
MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
// 查询
sourceBuilder.query(matchAllQueryBuilder);
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());
}
}
学习视频:网站