SpringBoot整合ElasticSearch

一、ElasticSearch简介

我们的应用经常需要添加检索功能,开源的 ElasticSearch 是目前全文搜索引擎的首选。它可以快速的存储、搜索和分析海量数据。

Spring Boot通过整合Spring Data ElasticSearch为我们提供了非常便捷的检索功能支持;

Elasticsearch是一个分布式搜索服务,提供Restful API,底层基于Lucene,采用多shard(分片)的方式保证数据安全,并且提供自动resharding的功能,github等大型的站点也是采用了ElasticSearch作为其搜索服务。

二、安装ElasticSearch

使用docker在Linux虚拟机上安装elasticsearch。

1、下载命令(下载时如果不指定版本,默认下载lastest,但是下载时找不到,这里指定版本6.5.0)
docker pull docker.io/elasticsearch:6.5.0

2、启动命令
注意:由于elasticsearch是用java写的,启动时会占用2个G的堆内存,所以启动时需要使用 -e 命令指定堆内存大小。
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name ES01 ff171d17e77c
-e:指定堆内存大小
-d:表示后台运行
-p:映射端口,9200:默认进行web通信端口,9300:分布式情况下,ES各个节点之间通信的接口
–name:指定名称
ff171d17e77c:镜像ID
SpringBoot整合ElasticSearch_第1张图片

3、查看是否启动成功
在浏览器中输入:192.168.199.220:9200
(192.168.199.220为虚拟主机的地址)
发现访问失败,
SpringBoot整合ElasticSearch_第2张图片

4、为什么会失败,我们可以查看该容器的日志
①查看所有的容器
docker ps -a
②查看elasticsearch对应容器的日志
docker logs 47ca4faf916c
SpringBoot整合ElasticSearch_第3张图片

5、找到错误日志
SpringBoot整合ElasticSearch_第4张图片
可以看出:空间内存的问题

6、解决办法
①在 /etc/sysctl.conf 追加最大虚拟空间限制 vm.max_map_count=655360
使用vi /etc/sysctl.conf 命令进入编辑页面
SpringBoot整合ElasticSearch_第5张图片
②让新增配置生效
sysctl -p
在这里插入图片描述
③重新启动elasticsearch容器
docker start 47ca4faf916c
SpringBoot整合ElasticSearch_第6张图片

7、验证是否成功
还是输入:192.168.199.220:9200
SpringBoot整合ElasticSearch_第7张图片
当看到这个表示成功!!!

三、SpringBoot整合ElasticSearch

1、引入依赖

		
            org.springframework.boot
            spring-boot-starter-data-elasticsearch
        

2、application.properties配置

#cluster-name,需要在浏览器中输入192.168.199.220:9200,来获取
spring.data.elasticsearch.cluster-name=docker-cluster

#es访问路径
spring.data.elasticsearch.cluster-nodes=192.168.199.220:9200

SpringBoot整合ElasticSearch_第8张图片

3、使用ElasticsearchRepository实现

①创建接口继承ElasticsearchRepository

public interface BookRepository extends ElasticsearchRepository {
        public List findbyBookName(String bookName);
}

②创建实体类

@Document(indexName = "pyf",type = "book")
public class Book implements Serializable
{
    private static final long serialVersionUID = -7976701701859021216L;
    private Integer id;
    private String bookName;
    private String author;
}

③测试代码

@SpringBootTest
class SpringbootElasticApplicationTests {

    @Autowired
    private BookRepository bookRepository;

    @Test
    public void saveIndex(){
        Book book = new Book();
        book.setId(1);
        book.setBookName("斗破");
        book.setAuthor("土豆");
        bookRepository.index(book);
    }

    @Test
    public void searchIndex(){
//        Iterable all = bookRepository.findAll();
        List bookList = bookRepository.findbyBookName("破");
    }

}

4、使用ElasticsearchTemplate实现

  @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;

    @Test
    public void saveIndex02(){
        Book book = new Book();
        book.setId(2);
        book.setBookName("遮天");
        book.setAuthor("辰东");
        boolean index = elasticsearchTemplate.createIndex("index",book);
    }

你可能感兴趣的:(SpringBoot整合ElasticSearch)