Centos7下安装ElasticSearch并集成到springboot

搜索引擎知识和搜索框架elasticsearch基本介绍
        elasticsearch:针对数据量特别大,PB,TB
          纯java开发,springboot使用,5.6版本
          es升级4->5版本,改动大,但是5版本后,改动不大
    elasticSearch主要特点

        1、特点:全文检索,结构化检索,数据统计、分析,接近实时处理,分布式搜索(可部署数百台服务器),处理PB级别的数据
            搜索纠错,自动完成
        2、使用场景:日志搜索,数据聚合,数据监控,报表统计分析
        3、国内外使用者:维基百科,Stack Overflow,GitHub

    新特性讲解
        1、6.2.x版本基于Lucene 7.x,更快,性能进一步提升,对应的序列化组件,升级到Jackson 2.8
            mysql:database   table   rocord
            es   : index      type(只能存在一个)    document

        2、推荐使用5.0版本推出的Java REST/HTTP客户端,依赖少,比Transport使用更方便,在基准测试中,性能并不输于Transport客户端,

        在5.0到6.0版本中,每次有对应的API更新, 文档中也说明,推荐使用这种方式进行开发使用,所有可用节点间的负载均衡
        在节点故障和特定响应代码的情况下进行故障转移,失败的连接处罚(失败的节点是否重试取决于失败的连续次数;失败的失败次数越多,客户端在再次尝试同一节点之前等待的时间越长)
        3、(重要)不再支持一个索引库里面多个type,6.x版本已经禁止一个index里面多个type,所以一个index索引库只能存在1个type

        官方文档:
        1、6.0更新特性
         https://www.elastic.co/guide/en/elasticsearch/reference/6.0/release-notes-6.0.0.html#breaking-java-6.0.0
        2、6.1更新特性 
        https://www.elastic.co/guide/en/elasticsearch/reference/6.1/release-notes-6.1.0.html

Centos7环境下安装ES并实现远程访问

  •  elasticsearch需要jdk支持,我安装的是jdk1.8。配置jdk1.8,下载地址如下,或者从官网下载也可以。链接:https://pan.baidu.com/s/1rzmEDtcsoIUKgjGpBVadzg  提取码:4ovu 
  • #解压命令
    tar -zxvf jdk-8u131-linux-x64.tar.gz

    解åJDKå®è£å.png

        è§£åå®æ.png

  • 配置jdk
#进入/etc/profile
vim /etc/profile
#在profile文件末尾输入以下文字
JAVA_HOME=/usr/local/java/jdk1.8.0_131
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME
export CLASSPATH
export PATH
#保存并退出
esc : wq

   éç½®JDK.png

  • 刷新配置文件,验证JDK是否配置成功
source /etc/profile
java -version

éªè¯.png

  • 将下载的elasticserach安装包进行解压,解压之后进入根目录下的conf下。然后打开elasticsearch.yml文件
vi elasticsearch.yml

修改配置项为    network.host: 0.0.0.0   如下图,保存并退出。

PS:elasticserach所需内存比较大,如果服务器的内存不够会报内存溢出的错误,此时可以通过修改conf下的jvm.options文件来解决问题。修改下图位置,将启动内存设置成128M

  • 考虑安全原因elasticsearch是不允许root用户启动的,需要创建用户

创建用户

adduser 用户名

设置密码

passwd 用户名
  • 启动elasticsearch。在bin目录下执行启动命令(需要切换到创建的用户 su 用户名)
./elasticsearch

此时启动之后就无法再执行其他命令了,这样会很不方便。可以执行如下命令,进行后台启动

./elasticsearch -d

启动成功之后本地浏览器输入http://IP:9200进行访问,出现下图信息即可

常见报错

1、错误:the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

解决方法:

编辑elasticsearch.yml:
cluster.initial_master_nodes: ["node-1"] ,这里的node-1是上面一个默认的打开就可以了

2、错误:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决方法:

在   /etc/sysctl.conf文件最后添加一行

vm.max_map_count=262144

接下来进行springboot集成elasticserach

  • pom文件下加入相关jar包依赖
   <!--添加ES相关jar包-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.1</version>
		</dependency>
  • application.properties配置文件中添加配置信息
##=========Elasticsearch配置=========
spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=IP:9300
spring.data.elasticsearch.repositories.enabled=true 
  • 创建Article.java实体类
import org.springframework.data.elasticsearch.annotations.Document;

import java.io.Serializable;

/**
 * @Author:Lyd
 * @Date 2020/1/8 11:08
 * @Description 文章对象
 */
@Document(indexName="blog",type = "article")
public class Article implements Serializable {
    private long id;
    private String title;
    private String summary;
    private String content;
    private int pv;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getSummary() {
        return summary;
    }

    public void setSummary(String summary) {
        this.summary = summary;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public int getPv() {
        return pv;
    }

    public void setPv(int pv) {
        this.pv = pv;
    }
}
  • 创建ArticleRespository.java接口类, 接口继承ElasticSearchRepository,里面有很多默认实现。
import com.lyd.pojo.Article;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Component;

/**
 * @Author:Lyd
 * @Date 2020/1/8 14:35
 * @Description
 */
@Component
//@Repository
public interface ArticleRespository extends  ElasticsearchRepository<Article, Long> {
}
  • 创建controller控制层类ArticalController.java
import com.lyd.pojo.Article;
import com.lyd.pojo.JsonData;
import com.lyd.respository.ArticleRespository;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


/**
 * @Author:Lyd
 * @Date 2020/1/8 14:50
 * @Description  es搜索引擎控制层实现
 */
@RestController
@RequestMapping("/api/v1/artical")
public class ArticalController {
    @Autowired
    private ArticleRespository articleRespository;

    /**
     * 保存
     * @return
     */
    @GetMapping(value = "save")
    public  Object save(){
        Article article=new Article();
        article.setId(1L);
        article.setContent("this is 内容");
        article.setPv(888);
        article.setTitle("springboot集成Elasticsearch 搜索引擎学习");
        article.setSummary("概要搜索");
        articleRespository.save(article);
        return JsonData.buildSuccess();
    }

    /**
     * ES查询数据
     * @param title
     * @return json格式查询数据
     */
    @GetMapping(value="search")
    public Object search(String title){
        QueryBuilder   queryBuilder= QueryBuilders.matchQuery("title",title);
        Iterable<Article> list=articleRespository.search(queryBuilder);
        return JsonData.buildSuccess(list);
    }
}

     启动项目浏览器中访问localhost:8080/api/v1/artical/save,执行数据保存操作,然后通过localhost:8080/api/v1/artical/search进行查询操作

PS:如果服务器在阿里云上需要开发9200、9300端口

配置es出现相关问题处理(阿里云、腾讯云,亚马逊云安装问题集合)
        1、问题一
            Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408, 0) failed; error='Cannot allocate memory' (errno=12)
            # There is insufficient memory for the Java Runtime Environment to continue.
            # Native memory allocation (mmap) failed to map 986513408 bytes for committing reserved memory.
            # An error report file with more information is saved as:
            # /usr/local/software/temp/elasticsearch-6.2.2/hs_err_pid1912.log
        解决:内存不够,购买阿里云的机器可以动态增加内存

        2、问题二
            [root@iZwz95j86y235aroi85ht0Z bin]# ./elasticsearch
            [2018-02-22T20:14:04,870][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
            org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
            at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:125) ~[elasticsearch-6.2.2.jar:6.2.2]
            at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) ~[elasticsearch-6.2.2.jar:6.2.2]
            at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.2.2.jar:6.2.2]
            at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.2.2.jar:6.2.2]
        解决:用非root用户
            添加用户:useradd -m 用户名  然后设置密码  passwd 用户名 

        3、问题三
            ./elasticsearch
            Exception in thread "main" java.nio.file.AccessDeniedException: /usr/local/software/temp/elasticsearch-6.2.2/config/jvm.options
           解决:权限不够 chmod 777 -R 当前es目录

        常见配置问题资料:https://www.jianshu.com/p/c5d6ec0f35e0

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪头的彩虹糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值