Elasticsearch环境安装及整合springboot

一、前言
进行SpringBoot整合Spring Data ES的时候遇到了一些坑,基本都是版本控制导致,同样在搭建ES Linux环境的时候也遇到了一些坑,还是总结一下,避免新人遇到跟我一样的情况

二、ES 在Linux下的环境搭建

因为搭建其实是比较基础,且简单的,我这边只会指出容易出错的地方,避免大家遇到类似问题

  1. 首先去官方下载最新的依赖包,我这边选用的是ES 5.5.0版本,为了跟spring data ES整合使用,后面会讲到

https://www.elastic.co/cn/downloads/past-releases#elasticsearch

  1. 将对应的包放在Linux终端下并解压,es目录我改了名字,初学者不要疑惑
    在这里插入图片描述

  2. 由于ES在Linux下的限制,需要作如下配置,否则会启动失败

  3. 修改/etc/security/limits.conf 文件

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
  1. 修改 /etc/sysctl.conf 增加 vm.max_map_count=262145
  2. 修改ES config目录下的elasticsearch.yml及jvm.options配置文件
    在这里插入图片描述
    我的配置如图
######elasticsearch.yml########
node.name: node-1 #配置当前es节点名称(默认是被注释的,并且默认有一个节点名)
cluster.name: my-application #默认是被注释的,并且默认有一个集群名
path.data: /home/es/data # 数据目录位置
path.logs: /home/es/logs # 日志目录位置
network.host: 0.0.0.0   #绑定的ip:默认只允许本机访问,修改为0.0.0.0后则可以远程访问cluster.initial_master_nodes: ["node-1", "node-2"] #默认是被注释的 设置master节点列表 用逗号分隔

######jvm.options#######
-Xms256m    -Xmx256m   #修改为自定义的的内存大小
  1. 由于ES必须要普通用户才能启动,添加普通用户,并且对es目录赋予权限
adduser es
chown -R es:es + es目录及配置文件制定的data、logs目录同样赋予权限否则会报错
  1. 切换到es用户下,启动es
su es
./es/elasticsearch/bin/elasticsearch   #启动脚本
  1. 出现如图所示表示启动成功,并通过端口访问ip:9200

防火墙必须关闭,否则无法请求成功
在这里插入图片描述
在这里插入图片描述

四、ES基础概念及基础语法使用

  • ES是一个分布式搜索型的数据库,它的数据存储方式是以json形式存储,而json数据属于轻量级可序列化,而且简单、简洁、易于阅读,详情参考官方中文文档

https://www.elastic.co/guide/cn/elasticsearch/guide/current/_document_oriented.html

  • ES中的index、type、document、filed的概念

index,索引就类似于MySQL中的数据库的概念
type,类型就类似于MySQL中的表的概念
document,文档就类似于MySQL中的每行记录
filed,字段就类似于MySQL中的column字段属性

  • 当然ES中还有一个分词器的概念,这个分词器对ES倒排索引起到了决定性作用,而且倒排索引是ES被各大企业青睐的原因所在,可参考官方文档好好了解这块

基础语法使用

由于ES支持RestFull API形式并结合DSL语言特性进行请求来对数据进行CRUD操作

  • 复合查询
//根据gameId、uid匹配查询
http://192.168.55.37:9200/索引/类型/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "uid": 90001388   
          }
        },
        {
          "match": {
            "gameId": "ioszhengbanziyunying"
          }
        }
      ]
    }
  }
}
  • 精准查询

//【term可用match代替】
http://192.168.55.37:9200/索引/类型/_search
{
  "query": {
    "term": {
      "uid": 90001388
    }
  }
}

  • 范围查询

http://192.168.55.37:9200/索引/类型/_search
{
  "query": {
    "range": {
      "utime": {
        "gte": 1527860849,
        "lte": 1533131249
      }
    }
  }
}

  • 聚合查询
// 最大/最小值查询可将sum改成max/min即可
http://192.168.55.37:9200/索引/类型/_search
{
  "query": {
    "term": {
      "uid": 90001352
    }
  },
  "size": 0,
  "aggs": {
    "payPrice_of_sum": {
      "sum": {
        "field": "payPrice"
      }
    }
  }
}
  • 删除语法

curl -XDELETE 'http://192.168.55.37:9200/索引/类型/_query?pretty' -d 
'{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "uid": "90001794"
          }
        },
        {
          "term": {
            "gameId": "1483086858573"
          }
        }
      ]
    }
  }
}'

  • 筛选求时间差值下符合条件的数据

GET /track_log-2020-*/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "app_id.keyword": {
              "value": "34234234234234"
            }
          }
        }
      ],
      "filter": {
        "script": {
          "script": {
            "source": "doc['server_time'].value.millis-doc['client_time'].value.millis>60000",
            "lang":"painless"
          }
        }
      }
    }
  }
}

四、后端SpringBoot整合Spring Data ES

  • 首先pom依赖包
<!-- springboot选用的是2.0.8.RELEASE,同样spring data ES也是2.0.8.RELEASE -->
 <parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>2.0.8.RELEASE</version>
     <relativePath/> <!-- lookup parent from repository -->
 </parent>

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <dependency>
    <groupId>org.springframework.boot</groupId>
 	<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
 </dependency>
  • 打点进去能够看到spring-boot-starter-data-elasticsearch的依赖的ES客户端版本是5.5.0版本,与我搭建ES server想匹配
    在这里插入图片描述
  • 编写application.yml配置

server:
  port: 8011
spring:
  data:
    elasticsearch:
      cluster-nodes: 192.168.245.128:9300
      cluster-name: my-application
      repositories:
        enabled: true
  • 定义一个实体类,与ES数据进行映射
@Data
@Document(indexName = "test",type = "test_table")   //定义索引、类型
public class TrackerLog {

    @Id
    private Long id;

    private Date clientTime;

    private Date serverTime;

    private String content;

}

  • 自定义接口来继承ElasticsearchRepository来实现CRUD操作
// ElasticsearchRepository传实体类对象,主键类型
public interface BaseElasticsearchRepository extends ElasticsearchRepository<TrackerLog,Long> {
    //自定义查询方法
    List<TrackerLog> findByContent(String content);
}
  • 定义EsController通过web形式进行接口调用

这边就简单写,正常要controller - > servcie -> dao

@RestController
public class EsController {

    @Autowired
    private BaseElasticsearchRepository baseEs;
    
    //创建索引、类型
    @GetMapping("/index")
    public String initEs(){
        TrackerLog trackerLog = new TrackerLog();
        baseEs.save(trackerLog);
        return "true";
    }
    //往ES写入数据
    @GetMapping("/create/{id}")
    public String putEsData(@PathVariable("id") Long id){
        TrackerLog trackerLog = new TrackerLog();

        trackerLog.setId(id);
        trackerLog.setClientTime(new Date());
        trackerLog.setServerTime(new Date());
        trackerLog.setContent("测试");

        baseEs.save(trackerLog);
        return "true";
    }
    //查询ES数据
    @GetMapping("/get/{id}")
    public TrackerLog getEsData(@PathVariable("id")Long id){
        Optional<TrackerLog> datas = baseEs.findById(id);
        return datas.get();
    }

}
  • 启动主启动类,访问localhost:8011端口进行接口调用即可

在这里插入图片描述
在这里插入图片描述

五、ES与springdataES版本控制

  • 大家要严格按照官方提供的版本匹配来,否则会因为版本不匹配出现一系列错误,我在这方面踩坑较多,希望大家不要跟我浪费同样的时间
    在这里插入图片描述
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Elasticsearch是一个开源的分布式全文搜索和分析引擎,而Spring Boot是Java开发的一种快速开发框架。将两者整合可以提供一个强大的搜索和分析功能的应用程序。 使用Spring Boot整合Elasticsearch的过程如下: 1. 首先,在pom.xml文件中添加ElasticsearchSpring Boot相关的依赖项。例如,添加spring-boot-starter-data-elasticsearch依赖来使用Spring Data Elasticsearch模块。 2. 在应用程序的配置文件中,配置Elasticsearch的连接参数,如主机地址、端口号等。可以使用Spring Boot的配置注解来简化配置过程。 3. 创建一个实体类,使用注解定义其映射到Elasticsearch索引的方式。可以使用@Document注解设置索引名称、类型等属性,使用@Field注解设置字段的映射方式。 4. 创建一个Elasticsearch的Repository接口,继承自Spring Data Elasticsearch提供的ElasticsearchRepository接口。可以使用该接口提供的方法来进行索引的增删改查操作。 5. 在需要使用Elasticsearch的业务逻辑中,注入创建的Repository接口实例,通过调用其方法来实现对索引的操作。例如,可以使用save方法保存实体对象到索引中,使用deleteById方法删除索引中的记录。 通过以上步骤,就可以实现ElasticsearchSpring Boot整合。使用Spring Boot可以极大地简化了配置和开发的过程,而Elasticsearch提供了强大的全文搜索和分析功能,可以为应用程序提供高效的搜索和查询性能。整合后的应用程序可以方便地使用Elasticsearch进行数据索引和搜索操作。 ### 回答2: Elasticsearch是一个开源的搜索引擎,可以用于处理大量数据的搜索、分析和存储。Spring Boot是一个用于快速构建应用程序的框架,可以简化开发过程并提供各种强大功能。 将ElasticsearchSpring Boot整合可以实现在应用程序中使用Elasticsearch进行数据的索引、搜索和分析。下面是一个简单的步骤来实现这个整合: 1. 添加依赖:在Spring Boot项目的pom.xml文件中,添加Elasticsearch相关的依赖。例如,可以使用spring-boot-starter-data-elasticsearch依赖来集成Elasticsearch。 2. 配置连接:在Spring Boot的配置文件中,配置Elasticsearch连接的相关信息,如主机地址、端口号、用户名和密码等。 3. 创建实体类:根据需要,创建要在Elasticsearch中索引的实体类。实体类一般使用注解来标识其在Elasticsearch中的索引和字段的映射关系。 4. 创建Repository:使用Spring Data Elasticsearch提供的@Repository注解来创建Elasticsearch的Repository接口。这个接口可以继承ElasticsearchRepository,并提供一些自定义的查询方法。 5. 编写业务逻辑:在Service层编写业务逻辑,调用自定义的Repository接口方法来对Elasticsearch进行操作。 6. 启动应用程序:使用Spring Boot的注解@SpringBootApplication来启动应用程序,其中会自动加载Elasticsearch的配置和相关的依赖。 通过以上步骤,我们就成功地将Elasticsearch整合到了Spring Boot应用程序中。可以通过访问RESTful接口来对Elasticsearch进行索引、搜索和分析等操作。此外,Spring Boot还提供了自动化配置和简化开发的特性,让整合过程更加方便快捷。 总结起来,通过整合ElasticsearchSpring Boot,我们可以利用Elasticsearch强大的搜索和存储功能来处理大量的数据,并结合Spring Boot框架的优势快速构建应用程序。 ### 回答3: Elasticsearch是一个基于Lucene的开源搜索和分析引擎,而Spring Boot是一个使用Java快速构建生产级别的应用程序的框架。将ElasticsearchSpring Boot整合可以提供强大的全文搜索和数据分析功能。 首先,我们需要在Spring Boot项目中添加Elasticsearch的依赖。可以通过在pom.xml文件中添加以下代码来实现: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 然后,我们需要创建一个Elasticsearch的配置类,用于配置Elasticsearch的连接信息。可以通过创建一个类,并添加`@Configuration`和`@EnableElasticsearchRepositories`注解来实现: ```java @Configuration @EnableElasticsearchRepositories(basePackages = "com.example.elasticsearch.repository") public class ElasticsearchConfig { @Value("${elasticsearch.host}") private String host; @Value("${elasticsearch.port}") private int port; @Bean public Client client() throws UnknownHostException { Settings settings = Settings.builder() .put("cluster.name", "elasticsearch").build(); TransportClient client = new PreBuiltTransportClient(settings); client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), port)); return client; } @Bean public ElasticsearchTemplate elasticsearchTemplate() throws UnknownHostException { return new ElasticsearchTemplate(client()); } } ``` 在上述代码中,我们通过从配置文件中读取主机和端口信息创建了一个Elasticsearch的客户端连接,并创建了一个用于Elasticsearch操作的ElasticsearchTemplate对象。 接下来,我们可以创建一个持久化层的接口,用于定义Elasticsearch的操作方法。可以通过创建一个接口,并添加`@Repository`注解来实现。例如: ```java @Repository public interface UserRepository extends ElasticsearchRepository<User, String> { List<User> findByName(String name); } ``` 在上述代码中,我们定义了一个UserRepository接口,继承了ElasticsearchRepository接口,并定义了一个按照名字查询用户的方法。 最后,我们可以在业务层或者控制层使用Elasticsearch相关的方法来进行搜索和分析操作。例如,我们可以在服务类中调用UserRepository的方法来实现用户的搜索: ```java @Service public class UserService { @Autowired private UserRepository userRepository; public List<User> searchUser(String name) { return userRepository.findByName(name); } } ``` 通过以上步骤,我们就可以在Spring Boot项目中实现Elasticsearch整合和使用了。通过配置Elasticsearch连接信息、定义操作方法和调用相关方法,可以方便地实现全文搜索和数据分析的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值