学习官方文档
官方文档:https://www.elastic.co/guide/index.html
1.原生依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.6.1</version>
</dependency>
2.对象
3.分析api方法
配置基本的项目
配置类
package com.szq.config;
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;
@Configuration
public class ElasticSearchConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder( new HttpHost("localhost", 9200, "http")));
return client;
}
}
springboot默认配置
RestClient
crud索引
package com.szq;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class EsApiApplicationTests {
@Autowired
@Qualifier("restHighLevelClient")
private RestHighLevelClient client;
//创建索引
@Test
public void createIndex() throws Exception{
//1.创建索引请求
CreateIndexRequest request = new CreateIndexRequest("szq_index");
//2.执行创建请求
CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
System.out.println(createIndexResponse);
}
//获取索引
@Test
public void exitIndex() throws Exception{
//1.创建索引请求
GetIndexRequest request = new GetIndexRequest("szq_index");
//2.执行创建请求
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
}
//删除索引
@Test
public void delIndex() throws Exception{
//1.创建索引请求
DeleteIndexRequest request = new DeleteIndexRequest("szq_index");
//2.执行创建请求
AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
System.out.println(delete);
}
}
crud文档
//添加文档
@Test
public void addDocument() throws Exception{
//创建对象
User user = new User("张三狂徒", 18);
//创建请求
IndexRequest request = new IndexRequest("szq_index");
//put /szq_index/_doc/1
request.id("1");
request.timeout(TimeValue.timeValueSeconds(1));
request.timeout("1s");
request.source(JSON.toJSONString(user), XContentType.JSON);
//客户端发送请求
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
//IndexResponse[index=szq_index,type=_doc,id=1,version=1,result=created,seqNo=0,primaryTerm=1,shards={"total":2,"successful":1,"failed":0}]
System.out.println(indexResponse.toString());
System.out.println(indexResponse.status());//CREATED
}
//获取文档 get/index/doc/1 判断文档是否存在
@Test
public void exitDocument() throws Exception{
GetRequest getRequest = new GetRequest("szq_index", "1");
//不获取返回的_source上下文,效率更高
getRequest.fetchSourceContext(new FetchSourceContext(false));
getRequest.storedFields("_none_");
boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
System.out.println(exists);
}
//获取文档信息
/**
* {"age":18,"name":"张三狂徒"}
* {"_index":"szq_index","_type":"_doc","_id":"1","_version":1,"_seq_no":0,"_primary_term":1,"found":true,"_source":{"age":18,"name":"张三狂徒"}}
* @throws Exception
*/
@Test
public void getDocument() throws Exception{
GetRequest getRequest = new GetRequest("szq_index", "1");
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
System.out.println(getResponse.getSourceAsString());
System.out.println(getResponse);
}
//更新文档
@Test
public void updateDocument() throws Exception{
UpdateRequest updateRequest = new UpdateRequest("szq_index", "1");
updateRequest.timeout("1s");
User user = new User("张三被绳之以法", 20);
updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
UpdateResponse updateResponse = client.update(updateRequest, RequestOptions.DEFAULT);
System.out.println(updateResponse.status());
}
//删除文档
@Test
public void delDocument() throws Exception{
DeleteRequest deleteRequest = new DeleteRequest("szq_index", "1");
deleteRequest.timeout("1s");
DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);
System.out.println(deleteResponse.status());
}
//批量操作 项目都是批量
@Test
public void getBatchDocument() throws Exception{
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("10s");
ArrayList<User> users = new ArrayList<>();
users.add(new User("张三被抓了",18));
users.add(new User("张三出狱了",20));
users.add(new User("张三又进去了",30));
for (int i = 0; i < users.size(); i++) {
bulkRequest.add(new IndexRequest("szq_index").id(""+(i+1)).source(JSON.toJSONString(users.get(i)),XContentType.JSON));
}
BulkResponse bulkItemResponses = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulkItemResponses.hasFailures());
}
//搜索
@Test
public void search() throws Exception{
SearchRequest searchRequest = new SearchRequest("szq_index");
//构建搜索条件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.highlighter();
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "张三");
//查询所有
//MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
searchSourceBuilder.query(termQueryBuilder);
//分页
// searchSourceBuilder.from(1);
// searchSourceBuilder.size(10);
searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits searchResponseHits = searchResponse.getHits();
System.out.println(JSON.toJSONString(searchResponseHits));
SearchHit[] hits = searchResponseHits.getHits();
Arrays.asList(hits).forEach(search -> {
System.out.println(JSON.toJSONString(search.getSourceAsMap()));
});
}