springboot整合es
1 引入依赖
<!-- es版本号 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
2 配置es地址
spring:
elasticsearch:
uris: 192.168.155.20:9200 # es的连接地址
3 创建实体类并使用注解
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
/**
* @author ypc
* @desc 用户索引库
* @date
*/
@Data
@Document(indexName = "user-demo") //es这里注解的索引库名字不能使用驼峰命名
public class User {
@Id //
private String id; //对应索引库中的id String和Integer都是可以的
private String username;
private String address;
private Integer age;
private String gender;
}
4 编写userMapper接口继承ElasticsearchRepository接口
如果官方提供的api不够的话 – 需要自己在继承ElasticsearchRepository接口中添加自定义的方法
import java.util.List;
/**
* @author ypc
* @desc 自定义一个mapper接口继承es的资源接口 实现curd操作 -- 写不写@repository都没事
* @date
*/
public interface UserMapper extends ElasticsearchRepository<User,String> {
/**
* 方法名字是和实体类中的子段名字有关系的 - 会提示 - 自定义查询方法-按照用户名查 -- 如果返回page类型的话 需要在参数中传递分页的一些参数等 否则会报错
* Username 第一个字母大写没有事 - 对应实体类username
*/
List<User> findByUsername(String userName); //类似精确匹配
/**
* 自定义返回Page的方法 springdata中的 包含username就就可以
*/
Page<User> findByUsernameContaining(String userName, Pageable page);
}
5 测试方法编写
// 新增
User save = userMapper.save(user);
//根据id删除索引库中某条数据
userMapper.deleteById(id);
//根据id修改索引库中某条数据
User save = userMapper.save(user);
//单条数据查询
Optional<User> byId = userMapper.findById("4");
System.out.println(byId);
//查询所有
//模糊匹配
Iterable<User> all = userMapper.findAll();
ArrayList<User> list = new ArrayList<>();
for (User user:all) {
System.out.println(user);
list.add(user);
}
//根据id查询
Iterable<User> allById = userMapper.findAllById(ids);
Iterator<User> iterator = allById.iterator();
//或者foreach循环
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
6 测试UserMapper中自定义的方法
// 测试根据索引库中的username精确查找文档 返回List
List<User> zhangsan5 = userMapper.findByUsername("zhangsan5"); //[User(id=4, username=zhangsan4, address=河北省4, age=8, gender=男)]
System.out.println(zhangsan5);
// 测试返回Page对象 需要传入分页参数Pageable 类型 查1-100条 重0开始
Pageable pageable = PageRequest.of(0, 100);
Page<User> page = userMapper.findByUsernameContaining("zhangsan", pageable);
System.out.println(page.getContent()); //得到内容
7 在kibana中进行测试查看
。。。。。。