分布式系列教程(30) -SpringBoot整合ElasticSearch

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 分布式系列教程(30) -SpringBoot整合ElasticSearch

1. 引言

代码已提交至Github,有兴趣的同学可以下载来看看:https://github.com/ylw-github/SpringBoot-ElasticSearch-Demo

2. SpringBoot整合ElasticSearch

1.新建Maven项目Spring-ElasticSearch-Demo

2.添加maven依赖:

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.0.0.RELEASE</version>
  <relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencies>
  <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>
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
  </dependency>
</dependencies>

3.application.yml

spring:
  data:
    elasticsearch:
    ####集群名称
     cluster-name: myes
    ####地址 
     cluster-nodes: 192.168.162.131:9300

4.实体类层

@Document(indexName = "user_dao", type = "user")
public class UserEntity {
  private String id;
  private String name;
  private int sex;
  private int age;
  //getter/setter......
}

5.Dao类层

public interface UserReposiory extends CrudRepository<UserEntity, String> {
}

6.控制器层:

@RestController
public class EsController {
  @Autowired
  private UserReposiory userReposiory;
  @RequestMapping("/addUser")
  public UserEntity addUser(@RequestBody UserEntity user) {
    return userReposiory.save(user);
  }
  @RequestMapping("/findUser")
  public Optional<UserEntity> findUser(String id) {
    return userReposiory.findById(id);
  }
}

7.启动项目:

@SpringBootApplication
@EnableElasticsearchRepositories(basePackages = "com.ylw.springboot.es.repository")
public class AppEs {
  public static void main(String[] args) {
    SpringApplication.run(AppEs.class, args);
  }
}

如果报以下异常:

None of the configured nodes are available:

说明没有配置cluster节点名,那么进入ElasticSearch配置文件目录配置:

[ylw@localhost root]$ cd /usr/local/elasticsearch-6.4.3/config/
[ylw@localhost config]$ vi elasticsearch.yml

配置内容:

cluster.name: myes

8.PostMan请求添加索引:http://127.0.0.1:8080/addUser

9.PostMan请求查询:http://127.0.0.1:8080/findUser?id=1,查询成功。

3. 9300与9200的区别

  • 「9300端口」: ES节点之间通讯使用。
  • 「9200端口」: ES节点 和 外部 通讯使用。
  • 「9300端口」:是TCP协议端口号,ES集群之间通讯端口号。
  • 「9200端口」:暴露ES RESTful接口端口号。

举个例子:调用RESTful创建文档(/索引/类型/id

1.创建文档,发送请求POST请求:http://192.168.162.131:9200/user_dao1/user/1

{
  "name":"ylw",
   "age":18,
   "sex":0
}

2.查询文档,发送请求GET请求:http://192.168.162.131:9200/user_dao1/user/1

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
2天前
|
编解码 NoSQL Java
Springboot框架使用redisson实现分布式锁
Redisson是官方推荐的Java Redis客户端,提供丰富的功能,包括默认的分布式锁支持。它可以无缝替代Spring Boot 2.x的Letture客户端,不影响原有RedisTemplate和Redis Repository的使用。集成包括spring-boot-starter-data-redis和redisson-spring-boot-starter,后者需排除默认的redisson-spring-data-23以匹配Spring Data Redis v.2.2.x。
|
2天前
|
存储 搜索推荐 Java
Java远程连接本地开源分布式搜索引擎ElasticSearch
Java远程连接本地开源分布式搜索引擎ElasticSearch
|
6天前
|
消息中间件 人工智能 Java
Spring Boot+RocketMQ 实现多实例分布式环境下的事件驱动
Spring Boot+RocketMQ 实现多实例分布式环境下的事件驱动
19 1
|
7天前
|
安全 Java API
SpringBoot 实现 elasticsearch 索引操作(RestHighLevelClient 的应用)
SpringBoot 实现 elasticsearch 索引操作(RestHighLevelClient 的应用)
13 1
|
7天前
|
自然语言处理 Java 索引
SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)
SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)
13 1
|
24天前
|
Java 测试技术 API
springboot整合ElasticSearch(工具类、测试调用)
springboot整合ElasticSearch(工具类、测试调用)
|
2月前
|
canal 消息中间件 关系型数据库
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
90 0
|
2月前
|
Java 测试技术 Maven
SpringBoot集成Elasticsearch
SpringBoot集成Elasticsearch
25 0
|
5天前
|
NoSQL Java 关系型数据库
【Redis系列笔记】分布式锁
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路
27 2
|
2天前
|
NoSQL Java 大数据
介绍redis分布式锁
分布式锁是解决多进程在分布式环境中争夺资源的问题,与本地锁相似但适用于不同进程。以Redis为例,通过`setIfAbsent`实现占锁,加锁同时设置过期时间避免死锁。然而,获取锁与设置过期时间非原子性可能导致并发问题,解决方案是使用`setIfAbsent`的超时参数。此外,释放锁前需验证归属,防止误删他人锁,可借助Lua脚本确保原子性。实际应用中还有锁续期、重试机制等复杂问题,现成解决方案如RedisLockRegistry和Redisson。