检索组件elasticsearch
一、ElasticSearch简介
1.简介
Elasticsearch是一个分布式搜索服务,提供restful API 底层基于Lucene,采用多shard(分片)的方式保证数据安全,并且提供自动resharding的功能,github等大型站点也是采用了Elasticsearch作为其搜索服务;
2.docker安装
- 搜索镜像
docker search elasticsearch
- 拉取镜像
docker pull elasticsearch:7.17.1
- 查看镜像
docker images
- 启动镜像
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -e "discovery.type=single-node" -d -p 9200:9200 -p 9300:9300 --name ES01 515ab4fba870
- 验证启动成功
访问:http://192.168.1.XXX:9200,返回以下JSON数据:{ "name" : "5ab04951e8e0", "cluster_name" : "docker-cluster", "cluster_uuid" : "v_6fQnhsQ8i1S0faXaTo2A", "version" : { "number" : "7.17.1", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "e5acb99f822233d62d6444ce45a4543dc1c8059a", "build_date" : "2022-02-23T22:20:54.153567231Z", "build_snapshot" : false, "lucene_version" : "8.11.1", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
二、elasticsearch操作
具体操作参考:
elasticsearch官方文档【中文】
或者关注后续的elasticsearch学习文档
三、SpringBoot整合Elasticsearch
1.引入maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
2. 自动配置
- SpringBoot默认支持两种技术和ES进行交互;
在SpringBoot1.X版本默认使用spring-data-elasticsearch和jest两种客户端和elasticsearch进行交互,但是随着jest在2018年停止维护,以及elasticsearch官方大力推荐RestHighLevel API对elasticsearch进行操作,spring官方在2.X版本移除了jest并加入了RestHighLevelClient; org.springframework.boot.autoconfigure
在自动配置包下的data.elasticsearch
和elasticsearch
下分别对应两种ES加护技术;org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
中引入了ElasticsearchRestTemplate
和ElasticsearchRepository
org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration
引入RestHighLevelClient
3. yml配置文件
spring:
elasticsearch:
uris: http://192.168.1.132:9200
4.RestHighLevelClient操作elasticsearch
@Autowired
RestHighLevelClient restHighLevelClient;
@Test
void contextLoads() throws IOException {
final GetRequest getRequest = new GetRequest();
getRequest.id("1");
getRequest.index("book");
final GetResponse documentFields = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
final String sourceAsString = documentFields.getSourceAsString();
System.out.println("sourceAsString = " + sourceAsString);
}
5. ElasticsearchRestTemplate 操作elasticsearch
@Autowired
ElasticsearchRestTemplate template;
@Test
void contextLoads3() throws IOException {
final Book book = template.get("1", Book.class);
System.out.println("book = " + book);
}
6.ElasticsearchRepository操作elasticsearch
- 编写某个bean的关联ElasticsearchRepository
自定义规则参考spring-data官方文档
public interface BookRepository extends ElasticsearchRepository<Book,Long> {
List<Book> findByAuthorLike(String author);
}
- 操作方法
@Autowired
BookRepository repository;
@Test
void contextLoads() {
/*Book book = new Book(1L,"红楼梦","曹雪芹");
repository.save(book);*/
for (Book book1 : repository.findAll()) {
System.out.println("book1 = " + book1);
}
}