关于springboot整合elasticsearch的一些坑和理解
导入jar包
一 如果要整合的话,我们第一步应该导入jar包,
<!-- 全文索引 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
配置application配置文件
spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=47.106.243.110:9300
spring.data.elasticsearch.repositories.enabled=true
第一行的是你的远程elasticsearch的名字,这个是你默认的名字,如果你没有设置elasticsearch的名字的话
第二行是你远程的ip和端口 一般elasticsearch的端口默认的都是9300.
第三个是是否使用repositories,设置为true
配置javabean类
@Document(indexName = "yoga",type = "coach")
public class CoachBean {
@Id
private Integer cId;
private String cNickname;
private Integer cGender;
//此处省略getter和setter
}
解释一下上面的代码,document里面的indexName代表的是数据库的名字,而type代表的是表名
@id 表明这个为主键
设置Resitory
public interface CoachResitory extends ElasticsearchRepository<CoachBean,Long> {
}
这个里面有几个坑 ElasticsearchRepository<CoachBean,Long> 这里面的coachbean必须是你得bean类名,而后面的是long类型
存入mysql数据和查询
@RestController
public class BackHandler extends BaseExceptionHandler{
@Autowired
private IBackService backServiceImpl;
@Autowired
private CoachResitory coachResitory;
@GetMapping("/serchcoach")
public List<CoachBean> CoachSerch(int page, int limit,String target){
System.out.println(backServiceImpl.Coachs());
coachResitory.saveAll(backServiceImpl.Coachs());
System.out.println(page+"------"+limit);
QueryStringQueryBuilder builder = new QueryStringQueryBuilder(target);
SearchQuery searchQuery = new NativeSearchQueryBuilder().withPageable(PageRequest.of(page-1, limit)).withQuery(builder).build();
System.out.println("查询的语句"+searchQuery.getQuery().toString());
Page<CoachBean> searchresult = coachResitory.search(searchQuery);
return searchresult .getContent();
}
}
解释一下上述代码,coachResitory.saveAll(backServiceImpl.Coachs());调用coachResitory的seveall方法,把从数据库中查询数据存入到elasticsearch中 ,这里因为我数据库的内容比较少,就用的saveall方法存入数据,不过这样的效率很慢,数据过多的话,可以自行百度导入数据的插件。
我用的分页条件查询,page 页数 ,limit 条数 ,target 查询条件。
QueryStringQueryBuilder builder = new QueryStringQueryBuilder(target);
SearchQuery searchQuery = new NativeSearchQueryBuilder().withPageable(PageRequest.of(page-1, limit)).withQuery(builder).build();
这两个是设置查询条件,并创建查询语句。
Page searchresult = coachResitory.search(searchQuery);
这个是开始查询并且返回查询的结果。
扫描Resitory
这点比较关键,我配置了很多次,发现都扫描不了Resitory,不过这个其实也很简单,只要在启动类加一个elasticsearch的注解扫描就行了,不过一定要加
@EnableElasticsearchRepositories(basePackages = "com.yoga.resitory")
ok ,springboot整合elasticsearch的简单整合大概这样就可以了。