一、安装Elasticsearch
1、Windows安装
Windows安装比较简单,ES官网Download Elasticsearch | Elastic下载压缩包,解压出来, bin 目录下有个elasticsearch.bat,双击,就运行起来了。
然后在浏览器输入localhost:9200验证,成功会返回下面的图片。
二、开始写代码
我的springboot版本是2.7.5,ES是7.17.3
官方文档
项目结构如下:
1、引入依赖
<!-- spring data es --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><!-- https://mvnrepository.com/artifact/jakarta.json/jakarta.json-api --><dependency><groupId>jakarta.json</groupId><artifactId>jakarta.json-api</artifactId><version>2.0.1</version></dependency>
2、配置文件
两种方式
(1)yaml配置文件
server:port: 8081
spring:elasticsearch:# elasticsearch地址uris: localhost:9200connection-timeout: 30000socket-timeout: 50000socket-keep-alive: false
(2)api 方式
会覆盖掉yml
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.ElasticsearchTransport;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;/*** @author */
@SpringBootConfiguration
public class ElasticSearchConfig {@Beanpublic ElasticsearchClient elasticsearchClient(){RestClient client = RestClient.builder(new HttpHost("localhost", 9200)).setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder.setConnectTimeout(30000).setSocketTimeout(50000)).build();ElasticsearchTransport transport = new RestClientTransport(client, new JacksonJsonpMapper());return new ElasticsearchClient(transport);}}
3、新建 User 实体类
id这个字段一定要有,作为主键索引,这个@Document里面的indexName就相当于mysql里面的表名,在elasticsearch里面叫索引。
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(indexName = "user")
public class User {@Idprivate String id;private String name;private String sex;private Integer age;
}
4、新建 UserRepository
import com.example.demo.document.User;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;/*** @author */
public interface UserRepository extends ElasticsearchRepository<User, String> {
}
5、新建 Controller
import com.example.demo.document.User;
import com.example.demo.repository.UserRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/user")
public class UserController {private final UserRepository userRepository;public UserController(UserRepository userRepository){this.userRepository = userRepository;}/*** 添加*/@RequestMapping("/insert")public String insert() {User user = new User();user.setId("1");user.setName("徐一杰");user.setSex("男");user.setAge(22);userRepository.save(user);return "success";}/*** 删除*/@RequestMapping("/delete")public String delete() {User user = userRepository.findById("1").get();userRepository.delete(user);return "success";}/*** 局部更新*/@RequestMapping("/update")public String update() {User user = userRepository.findById("1").get();user.setName("泡泡");userRepository.save(user);return "success";}/*** 查询*/@RequestMapping("/get")public User get() {User user = userRepository.findById("1").get();System.out.println(user);return user;}@RequestMapping("/getAll")public Page<User> getAll() {Pageable pageable = PageRequest.of(1,20);Page<User> user = userRepository.findAll(pageable);System.out.println(user);return user;}
}
6、测试
(1) 启动项目
可以看到,我们的user索引自动添加到elasticsearch里面了。
(2) 查询索引
我们用postman请求 http://localhost:8081/user/getAll,可以看到,返回了 user 的信息。