1. 环境准备
1.springboot 2.2.5
2.elasticsearch v6.8.0
2.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
3.编写配置类
@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {
@Override
@Bean
public RestHighLevelClient elasticsearchClient() {
ClientConfiguration clientConfiguration = ClientConfiguration.builder()
.connectedTo("192.168.98.137:9200")
.build();
return RestClients.create(clientConfiguration).rest();
}
}
4.编写pojo类
/**
* -indexName:索引名称,要求es服务器中不能存在此索引名
* -type:类型名称
* @author 86134
*
*/
@Data
@Document(indexName="users",type="user")
public class User {
@Id //用来将对象id属性与文档中_id的值对应
private String id;
@Field(type=FieldType.Text,analyzer ="ik_max_word")
private String name;
@Field(type=FieldType.Integer)
private Integer age;
@Field(type=FieldType.Date)
@JsonFormat(pattern="yyyy-MM-dd") //指定日期格式化
private Date bir;
@Field(type=FieldType.Text,analyzer ="ik_max_word")
private String content;
@Field(type=FieldType.Text,analyzer ="ik_max_word")
private String address;
}
@Document
: 代表一个文档记录
indexName
: 用来指定索引名称
type
: 用来指定索引类型
@Id
: 用来将对象中id和ES中_id映射
@Field
: 用来指定ES中的字段对应Mapping
type
: 用来指定ES中存储类型
analyzer
: 用来指定使用哪种分词器
5.编写UserRespository
/**
* -第一个参数:对应es的实体类
* -第二个参数:实体类主键的类型
* -spring工厂中有ElasticsearchRepository
* @author 86134
*
*/
public interface UserRespository extends ElasticsearchRepository<User,String> {
}
6.对文档的CRUD
1.索引或更新一条文档
//保存|更新一条文档,取决id是否存在
@Test
public void save() {
User user = new User();
user.setId(UUID.randomUUID().toString());
user.setName("王五");
user.setBir(new Date());
user.setAge(2820);
user.setAddress("广西");
user.setContent("王五是吃屎传人,吃屎很厉害");
userRespository.save(user);
}
2.删除一条文档
@Test
public void delete() {
userRespository.deleteById("ead608fe-4bfb-4337-bae5-a2fde0e6326b");
}
3.查询一条文档
public void findOne() {
Optional<User> optional = userRespository.findById("61bf673e-0857-462d-b703-56d443537446");
User user = optional.get();
System.out.println(user);
}
4.查询所有并排序
public void findAll() {
Iterable<User> iterable = userRespository.findAll(Sort.by(Direction.DESC, "age")); //根据年龄降序排序
iterable.forEach(user->System.out.println(user.getName()));
}
5.分页查询
public void pageQuery() {
//PageRequest.of:参数1:当前页-1,参数2:每页显示条数
Page<User> page = userRespository.search(QueryBuilders.matchAllQuery(),PageRequest.of(0, 1));
page.forEach(user->System.out.println