一、找官方文档
直通车官方文档 https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html
-
找到原生依赖
<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.12.1</version> </dependency>
-
找对象
RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("localhost", 9200, "http"), new HttpHost("localhost", 9201, "http"))); //关闭客户端 client.close();
-
分析这个类中的方法
二、配置基本操作
2.1 导入ES
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
问题:要保证导入的依赖和ES是同一个版本
<!--自定定义es版本依赖,保证和服务器中一致-->
<elasticsearch.version>7.12.1</elasticsearch.version>
2.2 创建配置文件ElasticSearchConfig
//1.找对象 2.放入spring中待用 3.分析源码
@Configuration
public class ElasticSearchConfig {
//RestHighLevelClient 高级客户端
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http")));
return client;
}
}
2.3 高级客户端索引API测试
/**
* 讲解es7.12.1 高级客户端测试API
*/
@SpringBootTest
class XsxtSystemApplicationTests {
@Autowired
@Qualifier("restHighLevelClient")
private RestHighLevelClient client;
//创建索引
@Test
void testCreateIndex() throws IOException {
//创建索引请求
CreateIndexRequest request = new CreateIndexRequest("gdh-index");
//客户端执行请求
CreateIndexResponse createIndexResponse =
client.indices().create(request, RequestOptions.DEFAULT);
System.out.println(createIndexResponse);
}
//获取索引,只能判断是否存在
@Test
void testExistIndex() throws IOException {
GetIndexRequest request = new GetIndexRequest("gdh-index");
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
}
//删除索引
@Test
void testDeleteIndex() throws IOException {
DeleteIndexRequest request = new DeleteIndexRequest("gdh-index");
AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
System.out.println(delete.isAcknowledged());
}
}
2.4 高级客户端文档API测试
//创建文档
@Test
void testAddDocument() throws IOException {
//创建对象
User user = new User("李四", 20);
//创建请求
IndexRequest request = new IndexRequest("gdh-index");
//规则
request.id("1");
request.timeout("1s");
//将我们的数据放入请求
request.source(JSON.toJSONString(user), XContentType.JSON);
//客户端发送请求,获取响应结果
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
System.out.println(indexResponse.toString());
//命令返回的状态
System.out.println(indexResponse.status());
}
//判断是否存在文档
@Test
void testIsExists() throws IOException {
GetRequest request = new GetRequest("gdh-index","1");
//不获取返回的_source 的上下文
request.fetchSourceContext(new FetchSourceContext(false));
request.storedFields("_none_");
boolean exists = client.exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
}
///获取文档信息
@Test
void testGetDocument() throws IOException {
GetRequest request = new GetRequest("gdh-index","1");
GetResponse getResponse = client.get(request, RequestOptions.DEFAULT);
System.out.println(getResponse.getSourceAsString());//打印文档内容
//返回全部内容
System.out.println(getResponse);
}
///更新文档信息
@Test
void testUpdateDocument() throws IOException {
UpdateRequest updateRequest = new UpdateRequest("gdh-index", "1");
updateRequest.timeout("1s");
User user = new User("DYT",6);
updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
System.out.println(update);
}
///删除文档信息
@Test
void testDeleteDocument() throws IOException {
DeleteRequest deleteRequest = new DeleteRequest("gdh-index", "1");
deleteRequest.timeout("1s");
DeleteResponse delete = client.delete(deleteRequest, RequestOptions.DEFAULT);
System.out.println(delete);
}
2.5 特殊批量插入、更新、删除
//批量插入数据
@Test
void testBulkRequest() throws IOException {
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("10s");
ArrayList<User> userList = new ArrayList<>();
userList.add(new User("李四",30));
userList.add(new User("李四1",33));
userList.add(new User("李四2",40));
userList.add(new User("王五1",19));
userList.add(new User("王五2",9));
userList.add(new User("王五3",11));
for (int i = 0; i<userList.size();i++) {
//批量更新和批量删除就在这里改对应的请求就可以了
bulkRequest.add(
new IndexRequest("gdh-index")
.id(""+(i+1))
.source(JSON.toJSONString(userList.get(i)),XContentType.JSON)
);
}
BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulk.hasFailures());//是否失败
}
//查询
/**
*SearchRequest 搜索请求
* SearchSourceBuilder 构造搜索条件
* HighlightBuilder 构造高亮
* QueryBuilders 精确
* MatchAllQueryBuilder 查询所有
*/
@Test
void testSearch() throws IOException {
//创建搜索请求
SearchRequest searchRequest = new SearchRequest("gdh-index");
//构造搜索条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
/**
* 查询条件 可以使用QueryBuilders工具来实现
* QueryBuilders.termQuery 精确
* QueryBuilders.matchAllQuery() 查询所有
*/
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "李四");
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().getHits()));
System.out.println("===============================");
for (SearchHit documentFields : search.getHits().getHits()){
System.out.println(documentFields.getSourceAsMap());
}
}