ES 7.6.x springboot API
一、导入依赖
二、初始化 RestHighLevelClient
@Configuration
public class ESConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"))//集群用逗号分隔添加多个参数
);
return restHighLevelClient;
}
}
三、API
/**
* es7.6.x 高级客户端测试API
*/
@SpringBootTest
class SpringbootEsApplicationTests {
@Autowired
@Qualifier("restHighLevelClient")
private RestHighLevelClient client;
//1.创建索引(库)
@Test
void createIndex() throws IOException {
//1.创建索引请求
CreateIndexRequest request = new CreateIndexRequest("index");
//2.客户端执行请求,请求后获得响应
CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);//第二个参数使用默认值
System.out.println(createIndexResponse);
}
//2.获取索引(判断索引是否存在)
@Test
void getExistIndex() throws IOException {
//1.创建索引请求
GetIndexRequest request = new GetIndexRequest("index");
//2.客户端执行请求,请求后获得响应
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);//第二个参数使用默认值
System.out.println(exists);
}
//3.删除索引
@Test
void deleteIndex() throws IOException {
//1.创建索引请求
DeleteIndexRequest request = new DeleteIndexRequest("index");
//2.客户端执行请求,请求后获得响应
AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);//第二个参数使用默认值
System.out.println(delete.isAcknowledged());
}
//4.添加文档
@Test
void addDocument() throws IOException {
//创建对象
User user = new User("张三", 12);
//创建请求
IndexRequest request = new IndexRequest("index");
//命令: put /index/_doc/1
//定义规则
request.id("1");
request.timeout(TimeValue.timeValueSeconds(1));
request.timeout("1s");
//传入json数据
request.source(JSON.toJSONString(user), XContentType.JSON);
//发送请求
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
System.out.println(indexResponse.toString());
}
//5.判断文档是否存在
@Test
void IsExists() throws IOException {
GetRequest request = new GetRequest("index", "1");
//不获取返回的_source的上下文
request.fetchSourceContext(new FetchSourceContext(false));
request.storedFields("_none_");
boolean exists = client.exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
}
//6.获取文档信息
@Test
void getDocument() throws IOException {
GetRequest request = new GetRequest("index", "1");
GetResponse documentFields = client.get(request, RequestOptions.DEFAULT);
System.out.println(documentFields.getSourceAsString());
}
//7.更新文档信息
@Test
void updateDocument() throws IOException {
UpdateRequest request = new UpdateRequest("index", "1");
request.timeout("1s");
User user = new User("李四", 11);
request.doc(JSON.toJSONString(user), XContentType.JSON);
UpdateResponse updateResponse = client.update(request, RequestOptions.DEFAULT);
System.out.println(updateResponse.status());
}
//8.删除文档
@Test
void deleteDocument() throws IOException {
DeleteRequest request = new DeleteRequest("index", "1");
request.timeout("1s");
DeleteResponse deleteResponse = client.delete(request, RequestOptions.DEFAULT);
System.out.println(deleteResponse.status());
}
//9.批量插入
@Test
void addAll() throws IOException {
//1.创建批量导入数据
BulkRequest bulkRequest = new BulkRequest();
//设置多长时间导入一次
bulkRequest.timeout("10s");
//2.定义一个集合
ArrayList<User> userList = new ArrayList<>();
userList.add(new User("耀", 21));
userList.add(new User("关羽", 22));
userList.add(new User("张飞", 20));
userList.add(new User("刘备", 23));
//3.将数据批量添加
for (int i = 0; i < userList.size(); i++) {
//如果需要做批量删除或者批量更新,修改这里请求即可
bulkRequest.add(
new IndexRequest("index")
//不填id时将会生成随机id
.id("" + i + 1 + "")
.source(JSON.toJSONString(userList.get(i)), XContentType.JSON)
);
}
//4.执行请求
BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
//5.响应 判断是否执行成功
RestStatus status = bulkResponse.status();
System.out.println(status.getStatus());
}
//10.条件查询
@Test
List<Map<String,Object>> searchAll() throws IOException {
//1.创建批量查询数据的请求
SearchRequest searchRequest = new SearchRequest("index");
//2.构建搜索的条件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//3.查询条件,我们可以使用QueryBuilders 工具类来实现
// (1)QueryBuilders.termQuery:精确匹配
// (2)QueryBuilders.matchAllQuery: 匹配所有
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("age", "22");
//4.放入构建器中
searchSourceBuilder.query(termQueryBuilder);
//设置时间
searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
//高亮
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("title"); //要高亮的字段
highlightBuilder.requireFieldMatch(false); //多个高亮显示
highlightBuilder.preTags("<span style='color:red'>");
highlightBuilder.postTags("</span>"); //自定义高亮标签和颜色
searchSourceBuilder.highlighter(highlightBuilder);
//5.构建搜索
searchRequest.source(searchSourceBuilder);
//6.执行请求
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
//打印
//System.out.println(JSON.toJSONString(searchResponse.getHits()));
//--------------------------------
SearchHit[] hits = searchResponse.getHits().getHits();
List<Map<String,Object>> list=new ArrayList<>();
for (SearchHit hit : hits) {
// System.out.println(hit.getSourceAsMap());
Map<String, Object> sourceAsMap = hit.getSourceAsMap();//结果
//将原来的结果替换成高亮的结果
/*Map<String, HighlightField> highlightFields = hit.getHighlightFields();
HighlightField title = highlightFields.get("title");
if (title!=null){
Text[] fragments = title.fragments();
String newTitle="";
for (Text text : fragments){
newTitle += text;
}
sourceAsMap.put("title",newTitle)
}*/
list.add(sourceAsMap);
}
return list;
}
}