集成SpringBoot
参考文档:Elastic Stack and Product Documentation | Elastic
1.maven依赖
//这个依赖可以直接在创建springboot项目时进行选择
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.15.2</version>
</dependency>
2.初始化
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http"),
new HttpHost("localhost", 9201, "http")));
最后记得关闭
client.close();
3.配置基本的项目
一定要保证我们导入的依赖和我们的es版本一致
需要自己自定义es版本依赖,保证和本地一致
@Configuration
public class EsClientConfiguration {
@Bean
RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("127.0.0.1", 9200, "http")));
return client;
}
}
(1)创建索引
@Autowired
private RestHighLevelClient restHighLevelClient;
@Test
void testCreate() throws IOException {
//1.创建索引请求 PUT testCreate
CreateIndexRequest createIndexRequest = new CreateIndexRequest("test_create");
//2.执行创建请求 IndicesClient,请求后获得响应
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);
System.out.println(createIndexResponse);
}
(2)查找索引(判断索引是否存在)
//测试获取索引,判断其是否存在
@Test
void getEs() throws IOException {
GetIndexRequest test_create = new GetIndexRequest("test_create");
boolean exists = restHighLevelClient.indices().exists(test_create, RequestOptions.DEFAULT);
System.out.println(exists);
}
(3)删除索引
//测试删除索引
@Test
void deleteEs() throws IOException {
DeleteIndexRequest test_create = new DeleteIndexRequest("test_create");
AcknowledgedResponse delete = restHighLevelClient.indices().delete(test_create, RequestOptions.DEFAULT);
System.out.println(delete);
}
(4)创建文档
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.78</version>
</dependency>
//测试添加文档
@Test
void AddEsWd() throws IOException {
//创建实体类对象
User user = new User("我是测试集成java",12);
//创建请求
IndexRequest test_create = new IndexRequest("test_create");
//创建规则
test_create.id("1");
test_create.timeout(TimeValue.timeValueSeconds(1));
//超出1s就不执行
test_create.timeout("1s");
//将数据放入请求 这里使用fastjson的jar包,不过推荐使用hutoool工具类
IndexRequest source = test_create.source(JSON.toJSONString(user), XContentType.JSON);
//客户端发送请求
IndexResponse index = restHighLevelClient.index(source, RequestOptions.DEFAULT);
//获取相应的结果
System.out.println(index.toString()); //IndexResponse[index=test_create,type=_doc,id=1,version=1,result=created,seqNo=0,primaryTerm=1,shards={"total":2,"successful":1,"failed":0}]
System.out.println(index.status()); //CREATED
}
(5)CRUD文档
判断是否存在
//测试获取文档
@Test
void getWd() throws IOException {
GetRequest test_create = new GetRequest("test_create", "1");
//不获取返回的_source上下文效率更高
test_create.fetchSourceContext(new FetchSourceContext(false));
test_create.storedFields("_none_");
boolean exists = restHighLevelClient.exists(test_create, RequestOptions.DEFAULT);
System.out.println(exists);
}
获取文档信息
//测试获取文档的信息
@Test
void getWdXx() throws IOException {
GetRequest test_create = new GetRequest("test_create", "1");
GetResponse exists = restHighLevelClient.get(test_create, RequestOptions.DEFAULT);
System.out.println(exists);//返回全部的内容
System.out.println(exists.getSource());//获取source中的信息 {name=我是测试集成java, age=12}
System.out.println(exists.getVersion());//获取版本
System.out.println(exists.getSourceAsString());//打印文档的内容 {"age":12,"name":"我是测试集成java"}
}
更新文档
//更新文档的信息
@Test
void updateWdXx() throws IOException {
UpdateRequest test_create = new UpdateRequest("test_create","1");
User user = new User("更新测试", 12);
test_create.doc(JSON.toJSONString(user),XContentType.JSON);
UpdateResponse update = restHighLevelClient.update(test_create, RequestOptions.DEFAULT);
System.out.println(update);
}
删除文档
//删除文档记录
@Test
void deleteWdXx() throws IOException {
DeleteRequest test_create = new DeleteRequest("test_create", "1");
DeleteResponse delete = restHighLevelClient.delete(test_create, RequestOptions.DEFAULT);
System.out.println(delete);
}
大批量操作文档
//真实的项目需要批量的插入数据
@Test
void testBulkRequest() throws IOException {
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("10s");
ArrayList<User> users = new ArrayList<>();
users.add(new User("test1",1));
users.add(new User("test2",2));
users.add(new User("test3",3));
users.add(new User("test4",4));
users.add(new User("test5",5));
//批处理请求
int i = 0;
for (User user : users){
i++;
bulkRequest.add(new IndexRequest("test_create")
.id(""+i) //不写id的话就会生出随机的id
.source(JSON.toJSONString(user),XContentType.JSON));
}
BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulk);
System.out.println(bulk.hasFailures());//是否失败 false成功
}
查找文档
//查询
@Test
void testSearch() throws IOException {
SearchRequest searchRequest = new SearchRequest("test_create");
//构建搜索的条件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//创建一个query构造器,进行分组查询
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name","测试");
searchSourceBuilder.query(matchQueryBuilder);
searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
searchRequest.source(searchSourceBuilder);
SearchResponse search = restHighLevelClient.search(searchRequest,RequestOptions.DEFAULT);
System.out.println(search.getHits());
System.out.println("=======================");
for (SearchHit hit : search.getHits()){
System.out.println(hit.getSourceAsString());
}
}
后续还会有相应的客户端及API使用