欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

记录 springboot整合elasticsearch搭建过程遇到的坑

程序员文章站 2024-01-20 10:51:16
最近在学习elasticseach,目前来说很火的全文搜索引擎。具体的,请参考官网,这里不多阐释,主要这里就是把自己 搭建 整合 elasticsearch和spring boot整合,来分享给大家 1.首先环境准备。docker,springboot 2.1.6.RELEASE,cent-os 虚 ......

 

最近在学习elasticseach,目前来说很火的全文搜索引擎。具体的,请参考官网,这里不多阐释,主要这里就是把自己 搭建 整合 elasticsearch和spring boot整合,来分享给大家

1.首先环境准备。docker,springboot 2.1.6.release,cent-os 虚拟机

  去官网  搜索elasticsearch

记录 springboot整合elasticsearch搭建过程遇到的坑

回车 搜索

记录 springboot整合elasticsearch搭建过程遇到的坑

点进去elasticsearch找到对应的版本,我这里建议 选6.8.1,为什么,一会再说

连接 虚拟机,有很多连接虚拟机的工具,我这里用的是securecrt , 因为6.8.1 版本运行起来,得制定虚拟机的运行大小,如果不指定的话,会启动不起来,启动

日志也有记录:

记录 springboot整合elasticsearch搭建过程遇到的坑

 

登录root用户:执行以下命令:

 sysctl -w vm.max_map_count=262144    指定大小

查看 是否设置成功

sysctl -a|grep vm.max_map_count

如果显示

vm.max_map_count = 262144 说明操作成功。

ok ,基本设置完毕。开始用docker 拉取下来elasticsearch的镜像

 docker pull elasticsearch:6.8.1

记录 springboot整合elasticsearch搭建过程遇到的坑

拉取完毕,我们来运行它

docker run -e es_java_opts="-xms256m -xmx256m"  -p 9200:9200 -p 9300:9300 --name myes2 你的iamgeid

这样运行可以看到 系统启动的日志,如果想系统后台的话 加个 -d 命令 docker run -e es_java_opts="-xms256m -xmx256m"  -d -p 9200:9200 -p 9300:9300 --name myes2 更多命令参数,请自行百度

启动好后,看是否启动成功,

执行:docker ps

记录 springboot整合elasticsearch搭建过程遇到的坑

 

可以看到,已经分配好了端口,9200 和 9300 并且已经映射好了

我们还可以修改elasticsearch的内部文件 执行

docker exec -it myes2   /bin/bash 进入到内部

记录 springboot整合elasticsearch搭建过程遇到的坑

记录 springboot整合elasticsearch搭建过程遇到的坑

对应的config文件夹下。就是配置。同样的logs文件夹就是log

启动 完后,测试下,是否可以在虚拟机里连接通

curl -a localhost:9200

记录 springboot整合elasticsearch搭建过程遇到的坑

这样,就启动好了。ok,虚拟机这边配置好了,接下来,java端。

我测试的时候,是用的 spring-data-jpa方式,ok,废话不多说,开始,首先是pom文件

<?xml version="1.0" encoding="utf-8"?>
<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
         xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelversion>4.0.0</modelversion>
    <parent>
        <groupid>org.springframework.boot</groupid>
        <artifactid>spring-boot-starter-parent</artifactid>
        <version>2.1.6.release</version>
        <relativepath/> <!-- lookup parent from repository -->
    </parent>
    <groupid>com.jdbctest</groupid>
    <artifactid>demo</artifactid>
    <version>0.0.1-snapshot</version>
    <name>demo</name>
    <description>demo project for spring boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
<!--        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-data-jpa</artifactid>
        </dependency>-->
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-jdbc</artifactid>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-web</artifactid>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-data-jpa</artifactid>
        </dependency>

        <dependency>
            <groupid>org.mybatis.spring.boot</groupid>
            <artifactid>mybatis-spring-boot-starter</artifactid>
            <version>1.3.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.druid/druid-server -->
        <dependency>
            <groupid>io.druid</groupid>
            <artifactid>druid-server</artifactid>
            <version>0.12.3</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupid>com.alibaba</groupid>
            <artifactid>druid</artifactid>
            <version>1.1.18</version>
        </dependency>



        <dependency>
            <groupid>mysql</groupid>
            <artifactid>mysql-connector-java</artifactid>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-test</artifactid>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-data-redis</artifactid>
        </dependency>
        <dependency>
            <groupid>com.liqs.myconfiguration</groupid>
            <artifactid>myconfiguration</artifactid>
            <version>3.0-snapshot</version>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-amqp</artifactid>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-data-elasticsearch</artifactid>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupid>org.springframework.boot</groupid>
                <artifactid>spring-boot-maven-plugin</artifactid>
            </plugin>
        </plugins>
    </build>

</project>

  因为测试的时候,,引用的其他的,我们暂时不关心,核心就是

        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-data-elasticsearch</artifactid>
        </dependency>

    

        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-data-jpa</artifactid>
        </dependency>
配置启动的时候的一些参数,我是用yml写的
spring:
  data:
    elasticsearch:
      cluster-name: docker-cluster //指定 集群的名字。不知道的话,可以
      cluster-nodes: 192.168.1.5:9300 //端口是9300 9200 是客户端访问的

  集群的名字,不知道的话可以参考上面 执行 curl以后的结果,里面会有集群名字

记录 springboot整合elasticsearch搭建过程遇到的坑



写一个bean 我们叫它book
package com.bean;

import org.springframework.data.elasticsearch.annotations.document;

//用 data的注解 document 指定 索引名,和类型,这里为了测试方便,我随便起的名字 @document(indexname = "test",type = "a") public class book { private string name; private string content; private integer id; public string getname() { return name; } public void setname(string name) { this.name = name; } public string getcontent() { return content; } public void setcontent(string content) { this.content = content; } public integer getid() { return id; } public void setid(integer id) { this.id = id; } }

 

 在写一个继承 

elasticsearchcrudrepository 的接口
searchjpa
package com.dao;

import com.bean.book;
import com.bean.user;
import org.springframework.data.elasticsearch.repository.elasticsearchcrudrepository;
//elasticsearchcrudrepository 会有两个泛型,一个是指定要存入对象的类型。另外一个是主键的类型
public interface searchjpa extends elasticsearchcrudrepository<book,integer> { }

  

基本的都写好了,来测试下
package com.controler;

import com.bean.book;
import com.bean.user;
import com.config.mqtest;
import com.dao.searchjpa;
import com.dao.userservice;
import com.liqs.config.myclassservice;
import org.springframework.data.domain.sort;
import org.springframework.data.elasticsearch.core.elasticsearchtemplate;
import org.springframework.data.jpa.repository.jparepository;
import org.springframework.stereotype.controller;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.responsebody;

import javax.annotation.resource;
import java.util.hashmap;
import java.util.map;

@controller
public class getuseraction {

    @resource
    private searchjpa searchjpa;

    @requestmapping("/getsearch")
    public string getelastic()  {
        book book =  new book();
        book.setid(1);
        book.setname("mybook");
        book.setcontent("mybook is written by liqs");
        searchjpa.save(book);

    }



}

  

我们在浏览器访问 http://localhost:8080/getsearch  端口 自己的服务器是什么,填写什么,我的是8080 默认的
ok 没报错,我们看下数据是不是真的进入了,这里我用的postman

记录 springboot整合elasticsearch搭建过程遇到的坑

可以看到 数据是已经存入了,到此结束

 遇到的问题,坑,总结一下

1.首先一个是,第一次启动es的时候,没有指定 es_java_opts 导致,启动虽然成功了,但是访问的时候,总是失败,后来百度了下,是因为 默认得分配4g空间大小。我这里没这么多,就按照网上设置的 es_java_opts="-xms256m -xmx256m" 就可以了。

2.版本匹配的问题,之前为什么说建议用6.8.1 版本呢,是因为 笔者用这个版本合成功了,如果想用其他版本的话,得参照官方的版本比对

记录 springboot整合elasticsearch搭建过程遇到的坑

 

 如果 你的系统报类似于找不到节点的错误,请检查

1.你的es服务是否真的启动好了。

2.你的集群的名字是否和你真正的es的集群名字一致

3.你的端口写的是否正确