1.方式一
1.1 依赖
【不使用 spring-boot-starter-data-elasticsearch 就可以脱离 springboot 版本的限制,可以自行选择ES的版本】我用的是 springboot 2.2.5.RELEASE 版本,ES部署文件为 elasticsearch-6.4.3.tar.gz,这里只贴出主要依赖:
<!-- ElasticSearch Server --> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>6.4.3</version> </dependency> <!-- Java High Level REST Client --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>6.4.3</version> </dependency>
1.2 配置信息
这里根据elasticsearch服务端的地址进行配置:
@Configuration public class ElasticSearchConfig { @Bean public RestHighLevelClient restHighLevelClient() { RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("127.0.0.1", 9200, "http") )); return client; } }
1.3 客户端使用
@SpringBootTest class EsApiApplicationTests { @Autowired @Qualifier(value = "restHighLevelClient") private RestHighLevelClient client; /*1.创建索引*/ @Test void createIndex() throws IOException { // 创建请求 CreateIndexRequest request = new CreateIndexRequest("yz_index"); // 执行请求,获取响应 CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT); System.out.println("creatIndex--" + response); } /*2.获取索引,判断是否存在*/ @Test void getIndex() throws IOException { // 创建请求 GetIndexRequest request = new GetIndexRequest("yz_index"); // 执行请求,获取响应 boolean exists = client.indices().exists(request, RequestOptions.DEFAULT); System.out.println("getIndex--exists--" + exists); } /*3.删除索引*/ @Test void deleteIndex() throws IOException { // 创建请求 DeleteIndexRequest request = new DeleteIndexRequest("yz_index"); // 执行请求 AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT); System.out.println("deleteIndex--" + response); } /*4.添加文档*/ @Test void addDocument() throws IOException { // 创建对象 User user = new User("Java虚拟机", 30); // 创建索引,即获取索引 IndexRequest indexRequest = new IndexRequest("yz_index"); // 添加规则 /index/_doc/id indexRequest.id("1"); indexRequest.timeout(TimeValue.timeValueSeconds(1)); // 存入对象 indexRequest.source(JSON.toJSONString(user), XContentType.JSON); // 发送请求 IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT); System.out.println("addDocument--" + response); } /*5.获取文档是否存在*/ @Test void getDocument() throws IOException { // 创建get请求 GetRequest getRequest = new GetRequest("yz_index", "1"); // 不获取返回的_source的上下文 getRequest.fetchSourceContext(new FetchSourceContext(false)); getRequest.storedFields("_none_"); // 发送请求 boolean exists = client.exists(getRequest, RequestOptions.DEFAULT); System.out.println("addDocument--" + exists); /*6.获取文档信息*/ if (exists) { // 创建请求 GetRequest getRequest1 = new GetRequest("yz_index", "1"); // 发送请求 GetResponse response = client.get(getRequest1, RequestOptions.DEFAULT); System.out.println("source--" + response.getSource()); System.out.println("getDocument--" + response.getSourceAsString()); } /*7.更新文档信息*/ if (exists) { // 创建请求 UpdateRequest updateRequest = new UpdateRequest("yz_index", "1"); updateRequest.timeout("1s"); // 修改内容 User user = new User("小米", 10); updateRequest.doc(JSON.toJSONString(user), XContentType.JSON); UpdateResponse response = client.update(updateRequest, RequestOptions.DEFAULT); System.out.println("updateDocument--" + response.status()); } /*8.删除文档信息*/ if (exists) { // 创建请求 DeleteRequest deleteRequest = new DeleteRequest("yz_index", "1"); deleteRequest.timeout("1s"); // 修改内容 DeleteResponse response = client.delete(deleteRequest, RequestOptions.DEFAULT); System.out.println("deleteDocument--" + response.status()); } } /*9.批量添加文档*/ @Test void batchAddDocument() throws IOException { // 批量请求 BulkRequest bulkRequest = new BulkRequest(); bulkRequest.timeout("10s"); // 创建对象 ArrayList<User> userArrayList = new ArrayList<>(); userArrayList.add(new User("小米1", 1)); userArrayList.add(new User("小米2", 2)); userArrayList.add(new User("小米3", 3)); userArrayList.add(new User("小米4", 4)); userArrayList.add(new User("小米5", 5)); // 添加请求 for (int i = 0; i < userArrayList.size(); i++) { bulkRequest.add(new IndexRequest("yz_index") .id("" + (i + 2)) .source(JSON.toJSONString(userArrayList.get(i)), XContentType.JSON)); } // 执行请求 BulkResponse response = client.bulk(bulkRequest, RequestOptions.DEFAULT); System.out.println("batchAddDocument--" + response.status()); } /*10.查询*/ @Test void search() throws IOException { // 创建请求 SearchRequest searchRequest = new SearchRequest("jd_index"); // 构建搜索条件 SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", "杜伽");// 精确查询 searchSourceBuilder.query(termQueryBuilder); searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); searchRequest.source(searchSourceBuilder); // 执行请求 SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT); // 解析查询结果 System.out.println("search--getHists--" + JSON.toJSONString(response.getHits())); for (SearchHit documentFields : response.getHits()) { System.out.println("search--getHist--" + documentFields.getSourceAsMap()); } } }
2.方式二
2.1 依赖
我用的是 springboot 2.5.4【所以spring-boot-starter-data-elasticsearch 的版本也是 2.5.4】此时对应的 elasticsearch 服务端和客户端的版本是 7.12.1 那要部署的ES版本也要是 7.12.1:
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-elasticsearch --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>
2.2 配置信息
spring: elasticsearch: rest: uris: localhost:9200
2.3 客户端使用
@SpringBootTest class EsStarterApplicationTests { @Autowired private RestHighLevelClient restHighLevelClient; @Test void contextLoads() { // 由于不同版本的API不同【没有参考价值】,这里不再贴出测试代码。 } }
3.注意事项
不同的 elasticsearch 版本有不同的 API 这就给升级造成了阻碍,为了避免这种情况,我们可以使用elasticsearch的 HTTP 客户端 Jest,下篇文章会详细说明。