springboot整合elasticSearch,首先可以通过yml配置。
同时可以通过使用configration注解将它注入到spring容器中
@Configuration
public class ESConfig {
@Bean
public RestHighLevelClient getClient(){
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("127.0.0.1",9200,"http")));
return restHighLevelClient;
}
}
config后可以直接使用
下面是关于索引得基本操作
/**创建索引
*
CreateIndexRequest createIndexRequest = new CreateIndexRequest("demo1");
client.indices().create(createIndexRequest, RequestOptions.DEFAULT);*/
/** 查询索引信息
* GetIndexRequest getIndexRequest = new GetIndexRequest("demo1");
GetIndexResponse getIndexResponse = client.indices().get(getIndexRequest, RequestOptions.DEFAULT);
System.out.println("------"+getIndexResponse);*/
/**删除索引信息
*
DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("demo1");
AcknowledgedResponse delete = client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
System.out.println(delete);
System.out.println(delete.isAcknowledged());*/
总结起来都是使用client.indices方法,add就是create , get查询,删除delete.非常简单
关于文件的操作也是一样
/**新增 :index
* User user =new User(1,"九六","123","沙鸥昂","12");
IndexRequest request = new IndexRequest("demo1");
request.index("demo1").id("1001");
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(user);
request.source(jsonString, XContentType.JSON);
IndexResponse indexResponse = restHighLevelClient.index(request, RequestOptions.DEFAULT);
System.out.println(indexResponse.getResult()); */
/**更新 ,局部,整体
* UpdateRequest updateRequest = new UpdateRequest();
* updateRequest.index("demo1").id("1001");
* updateRequest.
* doc(XContentType.JSON,"name","86"); //局部
*
* UpdateResponse update = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
* System.out.println(update.getResult());
* */
/**查询 单条
* GetRequest getRequest= new GetRequest();
getRequest.index("demo1").id("1001");
GetResponse documentFields = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
System.out.println(documentFields.getSource());
*/
/**删除单条
*
* DeleteRequest deleteRequest = new DeleteRequest();
* deleteRequest.index("demo1").id("1001");
* DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
* System.out.println(delete.getResult());
* */
新增就是直接使用client进行index请求,设置索引和文件id,将数据放到source中。
更新,update进行request请求,doc中设置相对应的文档的新field数据
查询单条一样,get,设置具体的索引和文档id。
删除就不多说了;
但是这些都是单条数据,下面的批量的和带条件的:
数据库的entity对象list集合 全部放入elastic
package com.jiuliu.controller;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jiuliu.entity.User;
import com.jiuliu.service.UserService;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.util.List;
@RestController
public class UserController {
@Autowired
private UserService userService;
@Autowired
private RestHighLevelClient restHighLevelClient;
@GetMapping
public String getAll() throws IOException {
List<User> all = userService.getAll();
//index : test_index;
BulkRequest bulkRequest = new BulkRequest();
for(User user: all){
IndexRequest indexRequest = new IndexRequest().source(JSON.toJSONString(user), XContentType.JSON).index("test_index");
bulkRequest.add(indexRequest);
}
BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
return bulkResponse.toString();
}
}
批量的增加操作就是用bulk,十分简单,但是我没有给文档设置id,但是elasticSearch会自动生成文档的id
批量的删除也是一样的,不过需要添加想要的文档id;
批量的查询:这里的查询都是使用SearchReqeust,而取代前面的getRequest
/**多条件查询
**/
SearchRequest searchRequest = new SearchRequest("test_index");
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.should(QueryBuilders.matchQuery("username","北平"));
boolQueryBuilder.should(QueryBuilders.matchQuery("username","第一"));
// 构建高亮参数
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("username"); // 设置要高亮显示的字段
highlightBuilder.preTags("<strong>"); // 设置高亮标签的前缀
highlightBuilder.postTags("</strong>"); // 设置高亮标签的后缀
//将高亮和查询条件放入
searchRequest.source(new SearchSourceBuilder().query(boolQueryBuilder).highlighter(highlightBuilder));
//执行查询
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsMap());