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
在这里插入图片描述

3、查看是否启动成功
在浏览器中输入:192.168.199.220:9200
(192.168.199.220为虚拟主机的地址)
发现访问失败,
在这里插入图片描述

4、为什么会失败,我们可以查看该容器的日志
①查看所有的容器
docker ps -a
②查看elasticsearch对应容器的日志
docker logs 47ca4faf916c
在这里插入图片描述

5、找到错误日志
在这里插入图片描述
可以看出:空间内存的问题

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

7、验证是否成功
还是输入:192.168.199.220:9200
在这里插入图片描述
当看到这个表示成功!!!

三、SpringBoot整合ElasticSearch

1、引入依赖
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
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

在这里插入图片描述

3、使用ElasticsearchRepository实现

①创建接口继承ElasticsearchRepository

public interface BookRepository extends ElasticsearchRepository<Book,Integer> {
        public List<Book> 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<Book> all = bookRepository.findAll();
        List<Book> 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);
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值