在这一篇文章开始之前,你需要先安装一个ElasticSearch,如果你是windows环境可以参考windows上安装 ElasticSearch-Head插件和Elasticsearch这篇文章。
官方介绍ElasticSearch:
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用Elasticsearch来解决所有这些问题及可能出现的更多其它问题。
1、启动 ElasticSearch服务。
这篇文章简单的介绍一下 spring boot整合Elasticsearch。
2、创建项目,pom文件中添加以下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
3、配置文件
server.port=8074
spring.data.elasticsearch.repositories.enabled=true
spring.data.elasticsearch.cluster-name=my-el
#9300与9200区别
#9300端口:ES节点之间的通讯使用,是TCP协议端口考号,ES集群之间通讯端口号
#9200端口: ES节点和 外部通讯使用,暴露ES restful 接口端口号
spring.data.elasticsearch.cluster-nodes=192.168.41.26:9300
4、创建用户实体
/**
*
* 功能:<br>
* 作者:小码张<br>
* 时间:2019年3月20日<br>
* 版本:1.0<br>
*
*/
@Document(indexName="userinfo", type="user")
//indexName索引名称 可以理解为数据库名 必须为小写 不然会报org.elasticsearch.indices.InvalidIndexNameException异常
//type类型 可以理解为表名
@Data
public class UserInfo {
@Id
// @Id注解加上后,在Elasticsearch里相应于该列就是主键了,在查询时就可以直接用主键查询,后面一篇会讲到。其实和mysql非常类似,基本就是一个数据库。
private String id;
private String name;
private String age;
}
5、创建UserRepository,继承CrudRepository,代码如下:
/**
*
* 功能:CrudRepository内部封装了对 Elasticsearch 的CRUD<br>
* 作者:小码张<br>
* 时间:2019年3月20日<br>
* 版本:1.0<br>
*
*/
@Component
public interface UserRepository extends CrudRepository<UserInfo, String>{
}
6、最后新建一个controller进行测试
@RestController
public class EsController {
@Autowired
private UserRepository userRepository;
@RequestMapping("/save")
public String saveUser() {
UserInfo user = new UserInfo();
user.setId("456321");
user.setName("张三");
user.setAge("18");
userRepository.save(user);
return "sueecss";
}
@RequestMapping("/findById")
public Optional<UserInfo> findById() {
return userRepository.findById("456321");
}
}
测试结果
注意:我的 Spring boot 版本是 2.0.1.RELEASE。