目录

简介

版本的选用

spring集成es开发

ElasticsearchRepository

RestHighLevelClient

查询

删除

安装es

java环境(低版本)

配置config

用户启动

权限控制

测试


简介

本人项目中数据量增大,查询性能要求提高,从pgsql升级到es。然而spring集成的过程中遇到了各种版本适配的问题,在这里记录一版奶奶级说明书。

版本的选用

以springBoot版本为基准,在项目确定了spring版本之后,pom文件引入spring-data-elasticsearch

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency>

刷新maven以后会得到一个自动生成的版本,打开依赖库查看该版本。我的版本是4.2.7

然后查看目录下得versions.properties文件,这个是依赖推荐的es版本

version.spring-data-elasticsearch=4.2.7
version.elasticsearch-client=7.12.1

可以看到versions.properties推荐的版本是7.12.1。那个这个时候,2件事

1.按照版本引入elasticSearch依赖(版本完全一致)

        <dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.12.1</version></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>7.12.1</version></dependency>

2.下载es

es官网下载地址

这两件事的后续分别是,spring集成es开发和搭建es环境。

spring集成es开发

es做CRUD操作的时候,其实和myBatis那一套差不多,就是查起来麻烦一点。

这里需要大家查看自己的es合适的repo。以我的7.12.1为例,官方推荐

ElasticsearchRepository 和 RestHighLevelClient 结合使用。

ElasticsearchRepository

高版本的ElasticsearchRepository弃用了老版本的很多方法,比如search。只剩下了相似查询方法

 我们可以用ElasticsearchRepository完成基本的save和delete操作,用RestHighLevelClient完成复杂的查询和指定删除操作。

继承了ElasticsearchRepository以后就可以用save,count等简单方法了,大家可以自己new一个进去看看方法的构建,和Mybatis差不多。

唯一要注意的是项目注入的时候要用一个特殊的注解,

@EnableElasticsearchRepositories(basePackages ="")

因为同级PackageScan和MapperScan都扫不到这个特殊的repository。

RestHighLevelClient

查询

低版本可能用的是elasticRestTemplate或者不是HighLevel的Client,这个大家可以看看各个版本的demo都是用什么查的,不合适的话在项目运行的时候可能出现版本适配的报错。

在使用RestHighLevelClient做复杂查询的时候,使用的是client.search()的方法

这个我不方便贴产品代码,这里贴一个指导贴

searchRequest的构建

如果这个帖子的查询还不够满足要求,可以继续百度QueryBuilders去构建你的复杂查询。

删除

常用的就是在定时任务中删除过期的数据

client.deleteByQuery(deleteByQueryRequest,RequestOptions.DEFAULT)

这里的DeleteByQueryRequest类的构建方式和前面的searchRequest的构建是一样的。一般就是配置一下index,查询条件,文件之类的,可以进入client的源码搜索你需要的方法。

deleteByQueryRrequest.indices("index");deleteByQueryRrequest.setQuery(QueryBuilders.rangeQuery("xxxtime").lt(time));

安装es

各个版本需要配置的东西不一样,比如高版本不用自己配置java环境,但无非就是几点

  1. jvm的配置
  2. java环境的配置
  3. elasticsearch.yml的配置
  4. bin/elasticsearch本身的配置
  5. 指定data目录和logs目录
  6. 配置sysctl

我列出几点,其他的大家可以百度自己的版本,版本不同我这里写的肯定是不全的(懒),如:安装es7.4.2。

java环境(低版本)

修改/bin/elasticsearch/bin目录下elasticsearch配置文件,顶部添加:

#修改/bin/elasticsearch/bin目录下elasticsearch配置文件,添加:#配置JDK11
export JAVA_HOME=/opt/jdk11/jdk-11.0.1
export PATH=$JAVA_HOME/bin:$PATH
#配置JDK判断
if [ -x "$JAVA_HOME/bin/java" ]; thenJAVA="/opt/jdk11/jdk-11.0.1/bin/java"
elseJAVA=`which java`
fi

配置config

以7.12.1为例

进入*/bin/elasticsearch/config目录,编辑elasticsearch.yml文件

cluster.name: CollectorDBClusterpath.data: /opt/elasticsearch/datapath.logs: /opt/elasticsearch/logsnetwork.host: 10.153.61.71http.port: 9200node.name: node-1cluster.initial_master_nodes: ["node-1"]
各配置项含义:
cluster.name    集群名称,各节点配成相同的集群名称。
node.name       节点名称,各节点配置不同。
node.master     指示某个节点是否符合成为主节点的条件。
node.data       指示节点是否为数据节点。数据节点包含并管理索引的一部分。
path.data       数据存储目录。
path.logs       日志存储目录。
bootstrap.memory_lock           内存锁定,是否禁用交换。
bootstrap.system_call_filter    系统调用过滤器。
network.host    绑定节点IP。
http.port       端口。
discovery.zen.ping.unicast.hosts    提供其他 Elasticsearch 服务节点的单点广播发现功能。
discovery.zen.minimum_master_nodes  集群中可工作的具有Master节点资格的最小数量,官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数量。
discovery.zen.ping_timeout          节点在发现过程中的等待时间。
discovery.zen.fd.ping_retries       节点发现重试次数。
http.cors.enabled                   是否允许跨源 REST 请求,用于允许head插件访问ES。
http.cors.allow-origin              允许的源地址。

用户启动

es是默认不允许root用户启动的,全部配置完之后创建es用户,把es文件夹的own丢给es用户

chown -R 用户 /文件夹

然后到bin目录启动

先使用./elasticsearch启动看看报文,如果启动没问题,中断进程再使用./elasticsearch -d后台启动。查看es是否在后台运行时命令 ps -ef | grep elasticsearch,注意es有可能启动失败但是进程没有自动关闭,这个时候要先使用kill -9 'PID' 再重新启动。

启动过程中碰到的error都可以复制直接去百度,我遇到的error全都查到了解决方案,没有什么疑难杂症。

权限控制

注意,配置集群和单节点是不一样的。

我参考的是es加密。

测试

本地和远程都是用

curl http://ip:port

返回

{"name" : "node-1","cluster_name" : "lecd-command","cluster_uuid" : "GaOl95PsRP6D7mYhOfu5fg","version" : {"number" : "7.12.1","build_flavor" : "default","build_type" : "tar","build_hash" : "3186837139b9c6b6d23c3200870651f10d3343b7","build_date" : "2021-04-20T20:56:39.040728659Z","build_snapshot" : false,"lucene_version" : "8.8.0","minimum_wire_compatibility_version" : "6.8.0","minimum_index_compatibility_version" : "6.0.0-beta1"},"tagline" : "You Know, for Search"
}

则启动和访问成功

查看数据

curl http://ip:port/_cat/indices/?v

health status index      uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   device_gps G3pAh0KrQuC52mhYEICN2w   1   1          3            0     16.4kb         16.4kb

count数和存入数一致可以验证项目的存入情况

有点记得收藏哦

Spring集成elasticSearch,搭建、使用、加密相关推荐

  1. Elasticsearch 实战1:ES 项目实战(一)Java 集成 Spring Data Elasticsearch(一):简介及环境搭建

    一:前语 1.项目文档 CSDN 专栏:<Elasticsearch 入门和项目实战> 博客路径: https://blog.csdn.net/a767815662/category_91 ...

  2. 第 4-8 课:Spring Boot 集成 ElasticSearch

    ElasticSearch 是⼀个开源的搜索引擎,建⽴在⼀个全⽂搜索引擎库 Apache Lucene™ 基础之上. Lucene 可以说是当下最先进.⾼性能.全功能的搜索引擎库--⽆论是开源还是私有 ...

  3. spring boot集成Elasticsearch客户端

    spring boot整合Elasticsearch客户端 在spring boot程序应用中集成Elasticsearch客户端,并通过配置对连接进行管理. Elasticsearch的客户端Jav ...

  4. Spring Boot 集成 Elasticsearch

    Elasticsearch (简称ES) 是一个基于 Lucene 的分布式.高扩展.高实时的搜索与数据分析引擎.本章介绍 Spring Boot 应用集成 Elasticsearch ,通过 Spr ...

  5. 【Spring Boot】21.集成elasticsearch

    2019独角兽企业重金招聘Python工程师标准>>> 简介 目前对于检索功能比较有名的服务是我们常见的elasticsearch,所以我们这一节的重点,也是针对elasticsea ...

  6. Spring Boot项目中集成Elasticsearch,并实现高效的搜索功能

    Spring Boot项目中集成Elasticsearch 前言 环境准备 引入依赖 配置Elasticsearch连接信息 定义实体类 定义Elasticsearch操作接口 实现搜索功能 总结 前 ...

  7. Spring Boot 集成 ElasticSearch,实现高性能搜索

    1.ElasticSearch介绍 Elasticsearch 是java开发的,基于 Lucene 的搜索引擎.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful Web接口.Elast ...

  8. SpringBoot207 - 集成 spring data elasticsearch

    扯淡: Spring Data Elasticsearch 是spring data对elasticsearch进行的封装.所以在springboot项目中使用es非常方便,直接在 dao 接口继承 ...

  9. Lucene 和 Kibana、ElasticSeach、Spring Data ElasticSearch

    什么是全文检索 数据分类 生活中的数据总体分为两种:结构化数据和非结构化数据. 结构化数据 - 行数据,可以用二维表结构来逻辑表达实现的数据:指具有固定格式或有限长度的数据,如数据库,元数据等. 非结 ...

最新文章

  1. 关于数论【康托展开及其逆运算】
  2. 面试题 flex(二)
  3. FFmpeg命令行map参数选择音视频流
  4. 前端学习(2910):vue的介绍
  5. 实况服务器制作,用Highcharts预处理实时数据及实况图表制作
  6. 使用Adreno Profiler分析android游戏
  7. redis并发锁 thinkphp5_资深架构师经典总结:Redis分布式锁实现理解
  8. 求1-50的偶数和,和奇数和
  9. 大多数可穿戴设备的基本原理总结
  10. 理解Rust的所有权
  11. 视频教程-CCNA趣味实战语音视频课程--企业VoIP组网实验-思科认证
  12. X79寨板远程启动计算机,X79旗舰主板评测
  13. 如何将纸质书怎么弄成电子版?如何将纸质文档变成电子文档,下面教你方法
  14. C++ 打表法计算农历错误数据处理
  15. ConneR and the A.R.C. Markland-N--- codeforces1293A
  16. 马克思主义哲学笔记(三)
  17. Unity Shader之燃烧消散效果
  18. linux命令 查看分辨率,linux怎样在命令行模式修改屏幕分辨率
  19. 深度学习中的正则化方法
  20. 丢手帕问题(约瑟夫问题-数组实现)

热门文章

  1. 详解C盘Windows文件夹里重要文件作用
  2. linux远程连接深度学习平台ssh/vcn
  3. 高新企业认定后的条件
  4. 实现 3D 时间动画展示效果
  5. 在Solaris下自动启动oracle|Sybase
  6. 微pe添加网络组件_对第三方PE加以定制的基本方法
  7. 译文:在闭包中使用循环变量是有害的
  8. 《文明6》引言科普 引言出处讲解 【转】
  9. 表格新增的属性及高级表单
  10. win10触摸键盘TabTip软件特性