ES7.6文档:
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.6/java-rest-high-getting-started.html
org.springframework.boot spring-boot-starter-data-elasticsearch
进入到依赖中 查看SpringBoot 默认使用的ES版本
默认使用的7.9.3 版本 org.elasticsearch.client transport ${elasticsearch} org.elasticsearch elasticsearch 7.9.3 compile
修改默认的ES版本
配置ElastciSearch1.8 7.6.2
@Configuration
public class ElasticSearchConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("110.40.242.86", 9200, "http")));
return client;
}
}
API
package com.liuy.lmall;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.liuy.lmall.entity.UmsAdmin;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
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.elasticsearch.common.text.Text;
import org.elasticsearch.common.unit.Timevalue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
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;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@SpringBootTest
public class LmallApplicationTest {
@Autowired
@Qualifier("restHighLevelClient")
private RestHighLevelClient client;
@Test
void testCreateIndex() throws IOException {
//创建索引请求
CreateIndexRequest request=new CreateIndexRequest("mall_index");
//执行请求IndicesClient
CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
System.out.println(createIndexResponse);
}
//索引所否存在
@Test
void testExistIndex() throws IOException {
GetIndexRequest request=new GetIndexRequest("mall_index");
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
}
//删除索引
@Test
void testdeleteIndex() throws IOException {
DeleteIndexRequest request=new DeleteIndexRequest("mall_index");
//删除
AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
System.out.println(delete.isAcknowledged());
}
//添加文档
@Test
void testAdddocument() throws IOException {
UmsAdmin admin=new UmsAdmin("liuyt","123465");
//创建请求
IndexRequest request=new IndexRequest("mall_index");
//规则 put /mall_index/_doc/1
request.id("1");
request.timeout(Timevalue.timevalueSeconds(1));
request.timeout("1s");
//数据放入请求 json
request.source(JSONUtil.parse(admin), XContentType.JSON);
//发送请求,获取响应结果
IndexResponse index = client.index(request, RequestOptions.DEFAULT);
System.out.println(index.toString());
System.out.println(index.status());
}
//获取文档,判断是否存在get /index/doc/1
@Test
void testIsExist() throws IOException {
GetRequest getRequest=new GetRequest("mall_index","1");
//不获取返回的_source 的上下文 性能更快
getRequest.fetchSourceContext(new FetchSourceContext(false));
getRequest.storedFields("_none_");
boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
System.out.println(exists);
}
//获取文档信息
@Test
void testGetdocument() throws IOException {
GetRequest getRequest=new GetRequest("mall_index","1");
GetResponse documentFields = client.get(getRequest, RequestOptions.DEFAULT);
System.out.println(documentFields.getSourceAsString());
System.out.println(documentFields);
}
//更新文档信息
@Test
void testUpdatedocument() throws IOException {
UpdateRequest updateRequest=new UpdateRequest("mall_index","1");
updateRequest.timeout("1s");
UmsAdmin admin=new UmsAdmin("liuyt","abcdefz");
updateRequest.doc(JSON.toJSONString(admin),XContentType.JSON);
UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
System.out.println(update.status());
System.out.println(update);
}
//删除文档信息
@Test
void testDeletedocument() throws IOException {
DeleteRequest deleteRequest=new DeleteRequest("mall_index","1");
deleteRequest.timeout("1s");
DeleteResponse delete = client.delete(deleteRequest, RequestOptions.DEFAULT);
System.out.println(delete.status());
System.out.println(delete);
}
//批量导入数据
@Test
void testBlukRequest () throws IOException {
//创建批处理请求
BulkRequest bulkRequest=new BulkRequest();
bulkRequest.timeout("10s");
ArrayList users=new ArrayList<>();
users.add(new UmsAdmin("123"));
users.add(new UmsAdmin("1231"));
users.add(new UmsAdmin("1232"));
users.add(new UmsAdmin("12"));
users.add(new UmsAdmin("1233"));
users.add(new UmsAdmin("1234"));
users.add(new UmsAdmin("12345"));
//批量处理请求
for (int i = 0; i < users.size(); i++) {
//批量添加
bulkRequest.add(
new IndexRequest("mall_index")
.id(""+(i+1))
.source(JSON.toJSONString(users.get(i)),XContentType.JSON)
);
}
//是否失败
BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulk.hasFailures());
}
@Test
void testSearch() throws Exception{
SearchRequest searchRequest=new SearchRequest("mall_index");
//构建搜索条件
SearchSourceBuilder searchSourceBuilder=new SearchSourceBuilder();
//匹配查询QueryBuilders.matchQuery("username","12");
//精确查询QueryBuilders.termQuery("username","12");
//查询匹配模式
MatchQueryBuilder queryBuilder= QueryBuilders.matchQuery("username","12");
searchSourceBuilder.query(queryBuilder);
searchSourceBuilder.timeout(new Timevalue(60, TimeUnit.SECONDS));
//高亮
HighlightBuilder highlightBuilder=new HighlightBuilder();
highlightBuilder.field("username");
highlightBuilder.requireFieldMatch(false);// 关闭多个高亮显示
highlightBuilder.preTags("");
highlightBuilder.postTags("");
searchSourceBuilder.highlighter(highlightBuilder);
//执行搜索
searchRequest.source(searchSourceBuilder);
SearchResponse search = client.search(searchRequest,RequestOptions.DEFAULT);
//解析结果
System.out.println(JSON.toJSONString(search.getHits()));
for (SearchHit hit : search.getHits().getHits()) {
//解析高亮字段
Map highlightFieldMap= hit.getHighlightFields();
HighlightField username = highlightFieldMap.get("username");
Map sourceMap= hit.getSourceAsMap();//原来的结果
//解析高亮字段,将原来字段替换为高亮字段
if (username!=null){
Text[] fragments = username.fragments();
String n_username="";
for (Text text : fragments) {
n_username+=text;
}
sourceMap.put("username",n_username);
}
System.out.println(hit.getSourceAsMap());
}
}
}



