首先我们导入个pom依赖,后面会用到
<!--将json格式对象转化成字符串-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.6</version>
</dependency>
RestHighLevelClient这个是自己实例的对象
@Configuration
public class ElasticSearchAPIConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient (RestClient.builder (
//如果是集群就构建多个,如果不是集群就构建一个
new HttpHost ("127.0.0.1", 9200, "http")
));
return client;
}
}
pojo类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String name;
private Integer age;
}
添加文档
在测试类中编写代码
@SpringBootTest
class EsApiApplicationTests {
//面向对象来操作
@Autowired
private RestHighLevelClient restHighLevelClient;
/**
* 添加文档
*/
@Test
void testAddDocument() throws IOException {
//1.创建对象
User user = new User ("李源志",20);
//2.创建请求
IndexRequest request = new IndexRequest ("liyuanzhi_index");
//3.规则 put /liyuanzhi_index/_doc/1
//put Restful风格的请求参数
//liyuanzhi_index 索引(在mysql数据库中称数据库)
//_doc 文档(随着版本的更新以后会被删除)
//1 id
//id设置
request.id ("1");
//方式一: 超时设置为1秒 默认为1秒
request.timeout (TimeValue.timeValueSeconds (1));
//方式二: 超时设置为1秒 request.timeout ("1s");
//4.将我们数据放入请求 json
IndexRequest source = request.source (JSON.toJSONString (user), XContentType.JSON);
//5.客户端发送请求 获取响应结果
IndexResponse indexResponse = restHighLevelClient.index (request, RequestOptions.DEFAULT);
//打印返回的结果
System.out.println (indexResponse.toString ());
//查看是否成功
System.out.println (indexResponse.status ());
}
}
运行结果
获取文档
/**
* 获取文档
*/
@Test
void testIsExists() throws IOException {
//1.创建获取请求
GetRequest getRequest = new GetRequest ("liyuanzhi_index", "1");
//设置 不获取返回的 _source 的上下文
getRequest.fetchSourceContext (new FetchSourceContext (false));
//配置排序的字段
getRequest.storedFields ("_none_");
//2.判断是否存在
boolean exists = restHighLevelClient.exists (getRequest, RequestOptions.DEFAULT);
if (exists){
System.out.println ("文档存在");
}else {
System.out.println ("文档不存在");
}
}
@Test
void testGetDocument() throws IOException {
//1.创建获取请求
GetRequest getRequest = new GetRequest ("liyuanzhi_index", "1");
//获取索引
GetResponse getResponse = restHighLevelClient.get (getRequest, RequestOptions.DEFAULT);
//打印文档内容
System.out.println (getResponse.getSourceAsString ());
//输出getResponse
System.out.println (getResponse);
}
这里我们为什么要分开写呢?
因为我们使用RestHighLevelClientAPI获取一次后,里面获取的数据就没了。
我们是先判断了文档是否存在的,已经调用过一次了,如果在使用RestHighLevelClientAPI调用get的时候name获取出来的值将为null
更新文档
/**
* 更新文档
*/
@Test
void testUpdateDocument() throws IOException {
//1.创建更新请求
UpdateRequest updateRequest = new UpdateRequest ("liyuanzhi_index", "1");
//设置超时时间为1s
updateRequest.timeout ("1s");
//2.创建一个对象
User user = new User ("不知火舞", 21);
//3.利用doc进行修改
updateRequest.doc (JSON.toJSONString (user),XContentType.JSON);
//4.接受请求
UpdateResponse updateResponse = restHighLevelClient.update (updateRequest, RequestOptions.DEFAULT);
//5.将数据返回
System.out.println (updateResponse.toString ());
//查看下是否更新成功
System.out.println (updateResponse.status ());
}
删除文档
/**
* 删除文档
*/
@Test
void testDeleteDocument() throws IOException {
//1.创建删除请求
DeleteRequest deleteRequest = new DeleteRequest ("liyuanzhi_index", "1");
//设置超时时间为1s
deleteRequest.timeout ("1s");
//2.接受删除请求
DeleteResponse deleteResponse = restHighLevelClient.delete (deleteRequest, RequestOptions.DEFAULT);
//3.查看下是否删除成功
RestStatus status = deleteResponse.status ();
System.out.println (status.getStatus ());
}