ELK的ElasticStack语法

目录

  • 传送门
  • 前言
  • 一、索引(数据库)
    • 1、创建索引
    • 2、获取索引
    • 3、删除索引
  • 二、文档(Row行)
    • 1、创建文档
    • 2、获取文档
    • 3、修改文档
    • 4、删除文档
    • 5、高级查询(精辟)
      • 条件查询
      • 分页、指定、排序、范围查询
      • 全文检索、分组查询等
      • match查询
      • match_phrase查询
      • multi_match查询
      • term查询
      • terms查询
      • fuzzy查询
      • range查询
      • bool查询
      • 排序和分页
    • 铁哥小结:
  • 三、javaAPI
  • 四、系统架构

传送门

SpringMVC的源码解析(精品)
Spring6的源码解析(精品)
SpringBoot3框架(精品)
MyBatis框架(精品)
MyBatis-Plus
SpringDataJPA
SpringCloudNetflix
SpringCloudAlibaba(精品)
Shiro
SpringSecurity
java的LOG日志框架
Activiti(敬请期待)
JDK8新特性
JDK9新特性
JDK10新特性
JDK11新特性
JDK12新特性
JDK13新特性
JDK14新特性
JDK15新特性
JDK16新特性
JDK17新特性
JDK18新特性
JDK19新特性
JDK20新特性
JDK21新特性
其他技术文章传送门入口

前言

ELK设置后抓日志非常好用,当然也不只是用于抓日志。功能强大,全文检索等等。

以下文章不定时更新。

ELK的ElasticStack概念
ELK的ElasticStack语法
ELK的ElasticStack安装
ELK的Logstash
ELK的Kibana
ELK的Filebeat

一、索引(数据库)

1、创建索引

在这里插入图片描述
在这里插入图片描述
由于没有幂等性,不能用post请求

2、获取索引

在这里插入图片描述
url没变,只是改成了get请求
在这里插入图片描述
全部索引

3、删除索引

在这里插入图片描述
url不变,请求变delete

二、文档(Row行)

1、创建文档

在这里插入图片描述
没有表的概念,直接在索引中添加数据。多次执行post请求,返回id不一样。所以post是非幂等性的。(幂等性每次执行都一样的结果),这里也可以用put的
在这里插入图片描述
这种是随机id
在这里插入图片描述
在这里插入图片描述
指定id

2、获取文档

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

3、修改文档

在这里插入图片描述
put是幂等性的(只有post是非幂等,delete、get、head都是幂等),put为全覆盖修改
在这里插入图片描述
post局部修改 用_update了

4、删除文档

在这里插入图片描述

5、高级查询(精辟)

文档:https://blog.csdn.net/qq_34263207/article/details/127849806

条件查询

在这里插入图片描述
q是查询的意思 q=title:华为,就是查询title中有华为字体的所有数据。
在这里插入图片描述
这种会把小米手机的也查询出来,应该是包含手机两个字的都出来了。
在这里插入图片描述
body方式条件查询

分页、指定、排序、范围查询

在这里插入图片描述
请求体 from是从哪一页开始 size是每页大小 下面的数据只显示了2条。
在这里插入图片描述
指定分页查询,只显示tilte字段信息出来,其他字段不显示出来。
在这里插入图片描述
排序语法,报错了,问题是排序的字段不能是字符串。json的时候 值不要上引号,直接用int类型的数字这种的才行。
在这里插入图片描述
这种请求体中 must类似于and,是同时满足的意思
在这里插入图片描述
should类似于or,或者的意思
在这里插入图片描述
filter过滤,range范围查询,价格大于5000的

全文检索、分组查询等

在这里插入图片描述
match就是全文检索
在这里插入图片描述
高亮显示
在这里插入图片描述
查询结果里面 对查询要高亮显示的字段做了特殊处理
在这里插入图片描述
这个会把原始数据也查出
在这里插入图片描述
价格size=0,会去掉原始数据,只查询出想要的分组数据
在这里插入图片描述

match查询

ES的查询有一个很大的特点就是分词。所以大家在使用ES的过程中脑子要始终有这么一个意识,你要查找的text是通过分词器分过词的,所以你去匹配的实际上是一个个被分词的片段。而你搜索的query也有可能会被分词,match就是一种会将你搜索的query进行分词的查询方法。我们结合例子来看!比如我们要查询的索引结构如下:
{"_index": "textbook","_id": "kIwXeYQB8iTYJNkI986Y","_source": {"bookName": "This is a test doc","author": "老坛","num": 20}
}
_index代表索引名称,_id代表该条数据唯一id,_source代表该条数据具体的结构。这里我们通过bookName字段来查询。输入query语句如下:
GET http://ip:prot/textbook/_search
{"query": {"match": {"bookName":"test"}}
}
该条语句代表用match方式搜索索引为textbook中bookName可以匹配到test的语句。因为:
"bookName": "This is a test doc"
原文被分词器分词后包含test这个词语,所以可以正常被匹配出来。这个例子比较简单,我们换个复杂一点的例子:GET http://ip:prot/textbook/_search
{"query": {"match": {"bookName":"my test"}}
}
大家认为这个能否被匹配出来呢?原文中根本就没有my这个词语,那怎么被匹配出来?但实际上是可以匹配出来的。原因是match查询里,会对你查询的query也进行分词,也就是会将你的"my test"进行分词,得到my与test两个词语,然后用这两个词语分别去匹配文本,发现虽然my匹配不到,但是test可以匹配到,所以依然可以查出来。这个和我们传统的搜索方式确实存在差异,大家要注意。那这种搜索方式存在的价值是什么呢?其实还有蛮大用处的。比如我们的ES库存储的是很多的英文好词好句,然后用户想提高自己的英文写作,因此想搜索出一些比较好的表达加在自己的文章中,那这个时候对于用户来讲,严格的匹配方式大概率什么都搜不到,但是像match这样的搜索方式便非常合适。例如有个好句是这样的:If at first you don't succeed, try again.
然后用户用下面的方式搜索:If you don't success
用match就可以很好的匹配出来。

match_phrase查询

既然match的限制比较小,那如果我们需要这个限制更强一点用什么方式呢?match_phrase便是一个比较不错的选择。match_phrase和match一样也是会对你的搜索query进行分词,但是,不同的是它不是匹配到某一处分词的结果就算是匹配成功了,而是需要query中所有的词都匹配到,而且相对顺序还要一致,而且默认还是连续的,如此一来,限制就更多了。我们还是举个例子。比如还是刚刚的索引数据:{"_index": "textbook","_id": "kIwXeYQB8iTYJNkI986Y","_source": {"bookName": "This is a test doc","author": "老坛","num": 20}
}
如果我们还用刚刚的方式搜索:GET http://ip:prot/textbook/_search
{"query": {"match_phrase": {"bookName":"my test"}}
}
这次是匹配不到结果的。那么怎样才能匹配到结果呢?只能是搜索原文中的连续字串:GET http://ip:prot/textbook/_search
{"query": {"match_phrase": {"bookName":"is a test"}}
}
这样是可以匹配到结果的。但是如此一来限制可能太大了一点,所以官方还给了一个核心餐宿可以调整搜索的严格程度,这个参数叫slop,我们举个例子:GET http://ip:prot/textbook/_search
{"query": {"match_phrase": {"bookName":{"query":"is test","slop":1}}}
}
比如我们将slop置为1,然后搜索"is test",虽然is test中间省略了一个词语"a",但是在slop为1的情况下是可以容忍你中间省略一个词语的,也可以搜索出来结果。以此类推,slop为2就可以省略两个词语了。大家可以根据自己的实际情况进行调整。另外我们可以发现,如果在搜索时添加了辅助参数(比如slop)我们搜索格式的层级要往下扩展一层,之前的"bookName":"my test"
要改为:"bookName":{"query":"is test","slop":1
}
我们注意一下就好了。

multi_match查询

有了前面的基础,multi_match比较好理解。实际上就是可以从多个字段中去寻找我们要查找的query:GET http://ip:prot/textbook/_search
{"query": {"multi_match": {"query" : "老坛","fields" : ["bookName", "author"]}}
}
比如这里我们是从bookName和author两个字段里去寻找老坛,虽然bookName没有,但是author可以匹配到,那也可以找到数据。所以本质上就是对bookName和author分别做了一次match:{"_index": "textbook","_id": "kIwXeYQB8iTYJNkI986Y","_source": {"bookName": "This is a test doc","author": "老坛","num": 20}
}

term查询

term查询也是比较常用的一种查询方式,它和match的唯一区别就是match需要对query进行分词,而term是不会进行分词的,它会直接拿query整体和原文进行匹配。所以不理解的小伙伴使用起来可能会非常奇怪:GET http://ip:prot/textbook/_search
{"query": {"term": {"bookName": "This is a test doc"}}
}
当我们用这种方式进行搜索时,明明要搜索的和被搜索的文本一模一样,确就是搜不出来。这就是因为我们去搜的实际上并不是原文本身,而是被分词的原文,在原文被分好的每一个词语里,没有一个词语是:"This is a test doc",那自然是什么都搜不到了。所以在这种情况下就只能用某一个词进行搜索才可以搜到:GET http://ip:prot/textbook/_search
{"query": {"term": {"bookName": "This"}}
}

terms查询

terms查询事实上就是多个term查询取一个交集,也就是要满足多个term查询条件匹配出来的结果才可以查到,所以是比单纯的term条件更为严格了:GET http://ip:prot/textbook/_search
{"query": {"terms": {"bookName": ["This", "is"]}}
}
比如这个例子,是要求原文中既有This这个词,又有is这个词才可以被查到,那按照这个规则我们是可以匹配到数据的:{"_index": "textbook","_id": "kIwXeYQB8iTYJNkI986Y","_source": {"bookName": "This is a test doc","author": "老坛","num": 20}
}
但是如果改成了一个不存在的词便匹配不到了:GET http://ip:prot/textbook/_search
{"query": {"terms": {"bookName": ["This", "my"]}}
}

fuzzy查询

fuzzy是ES里面的模糊搜索,它可以借助term查询来进行理解。fuzzy和term一样,也不会将query进行分词,但是不同的是它在进行匹配时可以容忍你的词语拼写有错误,至于容忍度如何,是根据参数fuzziness决定的。fuzziness默认是2,也就是在默认情况下,fuzzy查询容忍你有两个字符及以下的拼写错误。即如果你要匹配的词语为test,但是你的query是text,那也可以匹配到。这里无论是错写多写还是少写都是计算在内的。我们同样还是举例说明。对于索引数据:{"_index": "textbook","_id": "kIwXeYQB8iTYJNkI986Y","_source": {"bookName": "This is a test doc","author": "老坛","num": 20}
}
如果查询语句为:GET http://ip:prot/textbook/_search
{"query": {"fuzzy": {"bookName":"text"}}
}
这时肯定是用text来匹配原文中的每一个词,发现text和test最为接近,但是有一个字符的差异,在默认fuzziness为2的情况下,依然可以匹配出来。当然这个fuzziness是可以调的,比如:GET http://ip:prot/textbook/_search
{"query": {"fuzzy": {"bookName":{"value":"texts","fuzziness":1}}}
}
在容忍度为1的情况下,如果你想查texts就查不到结果了。

range查询

range查询时对于某一个数值字段的大小范围查询,比如我这里特意所加的nums字段就是这个时候派上用场的。range的语法设计到了一些关键字:gte:大于等于
gt:大于
lt:小于
lte:小于等于
GET http://ip:prot/textbook/_search
{ "query": {"range": { "num": { "gte":20, "lt":30 } }} 
}
比如这样的条件就是去查找字段num大于等于20小于30的数据那我们的数据便可以被查询到:{"_index": "textbook","_id": "kIwXeYQB8iTYJNkI986Y","_source": {"bookName": "This is a test doc","author": "老坛","num": 20}
}

bool查询

bool查询是上面查询的一个综合,它可以用多个上面的查询去组合出一个大的查询语句,它也有一些关键字:
must:代表且的关系,也就是必须要满足该条件
should:代表或的关系,代表符合该条件就可以被查出来
must_not:代表非的关系,也就是要求不能是符合该条件的数据才能被查出来
例如有这样一个查询:GET http://ip:prot/textbook/_search
{"query":{"bool":{"must":{"match":{"bookName":"老坛"}},"should":{"term":{"author":"老坛"},"range":{"num":{"gt":20}},}}}
}
这里就要求must里面的match是必须要符合的,但是should里面的两个条件就可以符合一条即可。

排序和分页

排序和分页也是建立在上述的那些搜索之上的。排序和分页的条件是和query平级去写的,我们一个一个来看。先举个例子:GET http://ip:prot/textbook/_search
{"query":{"match":{"bookName":"老坛"}},"from":0,"size":100,"sort":{"num":{"order":"desc"}}
}
这里关于分页的语句是:"from":0,
"size":100,
它代表的意思是按照页容量为100进行分页,取第一页​。关于排序的语句是:"sort":{"num":{"order":"desc"}
}
它需要指定一个字段,然后根据这个字段进行升序或降序。这里我们根据num来进行降序排序,如果想升序就把order的值改为asc就好了。
————————————————
版权声明:本文为CSDN博主「老坛聊开发」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34263207/article/details/127849806

铁哥小结:

比如 
后端数据库字段 content存的 this is a test  这句话;这部分我叫做原文部分。
前端有个keyword字段,输入任何内容来查询,下面不同关键字不同情况;这部分我叫做query部分。1、match(对query和原文部分都分词)
当前端输入this,传过来后端就是keyword =this的时候,匹配content字段的话(query=this):
match是把数据库content分词以后去匹配查询,分词后匹配,this可以匹配到,是可以查询到。
当前端输入my this(query=my  this):
可以匹配到,因为match不只是对content分词,对你传入的查询条件也分词,my  this分词后,里面的this刚好可以匹配到content分词后的this,所以就可以查询到。
2、term(直接拿query整体和原文等于一样的匹配)
当前端输入 this is a test(query=this is a test):
查询不到,因为query部分不会分词,就拿着这句话和原文部分去匹配,但是原文部分在es的作用下分词了,分成了几个不同单词,没有一个单词是能和query部分整句话匹配的,所以查不到。
query=this:
可以查询到,this可以和分词后的原文部分的一个单词匹配成功,就能查询出来。
3、terms(直接拿多个query和原文等于一样的匹配,都成功才能匹配到)
query=[this  , a] :
可以查询到,这种是多个部分,this去匹配可以匹配到,a去匹配可以匹配到,整体就能查询出来。
query=[this,b]:
查询不到,this去匹配可以匹配到,b匹配失败,整体就查询失败,查不出。
4、fuzzy(query部分输入的单词有错误也可以像term一样匹配成功)
fuzzy是ES里面的模糊搜索,它可以借助term查询来进行理解。fuzzy和term一样,也不会将query进行分词,但是不同的是它在进行匹配时可以容忍你的词语拼写有错误,至于容忍度如何,是根据参数fuzziness决定的。fuzziness默认是2,也就是在默认情况下,fuzzy查询容忍你有两个字符及以下的拼写错误。即如果你要匹配的词语为test,但是你的query是text,那也可以匹配到。这里无论是错写多写还是少写都是计算在内的。
query=thaa:
可以查询到,默认容忍度=2,少写多写错写两个字母都可以查询到。
query=thisbc :
可以查询到,同上。
5、range(query部分不能和content原文这种比较了,得和num这种数字原文比较大小)
比如 后端数据库字段 num存的  20
数字大于小于匹配的。里面有gte大于等于  lte小于deng  gt大于  lt小于。匹配数字的。
query.range.num.lte=30:
可以查询到,这意思query部分是找个小于30的数字
6、bool
bool查询是上面查询的一个综合,它可以用多个上面的查询去组合出一个大的查询语句,它也有一些关键字
must:代表且的关系,也就是必须要满足该条件
should:代表或的关系,代表符合该条件就可以被查出来
must_not:代表非的关系,也就是要求不能是符合该条件的数据才能被查出来
比如 后端数据库字段 age存的10,三个字段content、num、age
query.bool.[must=content.match=this][should=age.lt=30;shoud=num.lt=30]:
可以查询到,写的有点query有点抽象。意思是 must是content字段是this,可以匹配成功,should里面 age或者num小于30任何一个为真,就是真,should和must条件都满足,才能最后查询出来。刚好都满足,可以查出

三、javaAPI

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
批量插入,后面截图看不到的24行代码参数都是些json串
在这里插入图片描述
24行看不到的东西截图
在这里插入图片描述
批量删除
在这里插入图片描述
条件查询

在这里插入图片描述
过滤字段

在这里插入图片描述
组合查询

在这里插入图片描述
范围查询
在这里插入图片描述
模糊查询

在这里插入图片描述
高亮查询

在这里插入图片描述
聚合查询

在这里插入图片描述
分组查询 ageGroup 这种语法

四、系统架构

在这里插入图片描述
1、term key:value的精确查询
2、term key:value1,value2的精确查询
3、range gt lt等 范围查询
4、 exists 类似MySQL
5、match 标准查询,包含精确查询和全文查询
6、bool must相当于and must_not相当于not should相当于or
7、filter 过滤查询(普通查询不会缓存更浪费性能,过滤会缓存性能好,而且建议精确查询用过滤并且还能缓存数据)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/463823.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leaflet绘制圆形方案

电子围栏绘制方案: 采用leaflet绘制电子围栏 可以看对应api文档 。原生是英文,所以要重定义,直接覆盖下面的 leaflet.draw-cn.js 文件L.drawLocal = {draw: {toolbar: {// #TODO: this should be reorganized where actions are nested in actions// ex: actions.undo or a…

新能源汽车空调压缩机:科技驱动的冷暖核心

一、新能源汽车空调系统概述 新能源汽车空调系统在车辆中起着至关重要的作用,它直接影响着驾乘人员的舒适度。新能源汽车空调系统主要由制冷系统、加热系统、送风系统、操纵控制系统和空气净化系统等组成。 制冷系统通常由电动压缩机、冷凝器、压力传感器、电子膨…

Javaweb梳理8——数据库设计

Javaweb梳理8——数据库设计 8 数据库设计8.1 数据库设计简介8.2 表关系(一对多)8.3 表关系(多对多)8.4 表关系(一对一) 8 数据库设计 8.1 数据库设计简介 软件的研发步骤 数据库设计概念 数据库设计就是根据业务系统的具体需…

IDEA - 快速去除 mapper.xml 黄色警告线和背景色----简化版

1.打开设置 2.去掉黄色警告线设置 3.去掉背景色设置 4.示范图

vue3中使用vue-diff工具来比较数据差异

1.安装vue-diff npm i vue-diff 2.main.js中全局注册 import VueDiff from "vue-diff"; import "vue-diff/dist/index.css";app.use(VueDiff) 3.使用 <template><div class"contain-page"><el-scrollbar height"100vh&…

w014基于Springboot校园管理系统的设计与实现

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

openGauss数据库-头歌实验1-3 创建和管理模式

一、创建和使用模式 &#xff08;一&#xff09;任务描述 本关任务&#xff1a;基于 openGauss 学习创建模式的相关知识。 &#xff08;二&#xff09;相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.openGauss 的常用操作&#xff0c;2.SQL 创建模式相关语…

基于springboot+vue实现的任务管理系统(源码+L文)4-103

第4章 系统设计 4.1 总体功能设计 员工&#xff0c;经理&#xff0c;管理员都需要登录才能进入任务管理系统&#xff0c;使用者登录时会在后台判断使用的权限类型&#xff0c;包括一般使用者和管理者,一般使用者为员工和经理&#xff0c;对员工只能提供任务信息显示查询&…

PlotNeuralNet学习与入门

最近在绘制神经网络结构图&#xff0c;发现了一个开源的工具&#xff1a;PlotNeuralNet Github网址链接&#xff1a; HarisIqbal88/PlotNeuralNet: Latex code for making neural networks diagrams 一些相关的教程&#xff1a; 视频教程链接&#xff1a;【Alu】PlotNeuralN…

c怎么与python交互

ctypes是Python的一个外部库&#xff0c;可以使用python语言调用已经编译好的C语言函数以及数据类型并进行数据交换等。ctypes的官方文档在https://docs.python.org/3/library/ctypes.html 1、ctypes基本数据类型映射表 2、python调用c语言的函数库 &#xff08;1&#xff09…

less解决function中return写法在浏览器被识别成Object导致样式失败的问题

问题描述&#xff1a; 一开始写的是: baseFontSize: 37.5px;//基于屏幕尺寸/10得出的基准font-size// return失败,浏览器显示为[object Object],[object Object] .pxToRem(px){value: px / baseFontSize * 1rem;return value; } 使用height: .pxToRem(40px);之后浏览器却是这…

VR 创业之路:从《I Expect You To Die》到未来展望

今年是 Reality Labs 成立 10 周年&#xff0c;Meta 每周都会与不同的 XR 先驱进行交流&#xff0c;探讨他们在行业中的经历、经验教训以及对未来的展望。本次&#xff0c;他们与游戏设计师、作家兼 Schell Games CEO Jesse Schell 进行了深入交谈&#xff0c;了解了他的个人故…

面试经典 150 题:189、383

189. 轮转数组 【参考代码】 class Solution { public:void rotate(vector<int>& nums, int k) {int size nums.size();if(1 size){return;}vector<int> temp(size);//k k % size;for(int i0; i<size; i){temp[(i k) % size] nums[i];}nums temp; }…

数据结构 —— AVL树

目录 1. AVL的概念 2.AVL树的结构 3.AVL树的插入 3.1 平衡因子更新 4. 旋转 4.1 旋转的原则 4.2 右单旋 4.2.1 右单旋代码实现 4.3 左单旋 4.3.1 左单旋代码实现 4.4 左右双旋 4.4.1 左右双旋代码实现 4.5 右左双旋 ​编辑 4.5.1 右左双旋代码实现 5. AVL树的判断…

交换机如何实现2.5G网络传输速率和网络变压器有关吗

华强盛电子导读&#xff1a;I19926430038 交换机实现2.5G网络传输速率涉及多个因素&#xff0c;其中包括硬件设计、端口支持、传输介质以及网络协议等。网络变压器在其中扮演了一个重要的角色&#xff0c;但并不是唯一的因素。 1. **硬件设计**&#xff1a;交换机需要有支持2.…

「C/C++」C++设计模式 之 抽象工厂模式(Abstract Factory)

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

【pycharm jupyter】启动报错

报错信息 upyter server process exited with code 1 ServerApp] A _jupyter_server_extension_points function was not found in jupyter_lsp. Instead, a _jupyter_server_extension_paths function was found and will be used for now. This function name will be depre…

精密机械代加工服务,为你的企业加速发展!

在当今竞争激烈的工业领域&#xff0c;精密机械代加工服务正成为众多企业实现快速发展的关键助力。这种专业服务凭借其独特的优势&#xff0c;为企业解决了诸多生产难题&#xff0c;推动企业在市场中大步向前。 先进的技术与设备 精密机械代加工服务提供商通常配备了先进的加工…

Data+AI━━揭秘千亿参数背后的技术较量:全球巨头的大模型布局!

DataAI━━揭秘千亿参数背后的技术较量&#xff1a;全球巨头的大模型布局&#xff01; 前言大语言模型:AI技术创新的新高地智能技术创新的"深水区"智能革命的下一站 前言 站在2024年科技创新的潮头&#xff0c;一场由大语言模型引发的技术革命正在上演。从ChatGPT引爆…

jmeter压测工具环境搭建(Linux、Mac)

目录 java环境安装 1、anaconda安装java环境&#xff08;推荐&#xff09; 2、直接在本地环境安装java环境 yum方式安装jdk 二进制方式安装jdk jmeter环境安装 1、jmeter单机安装 启动jmeter 配置环境变量 jmeter配置中文 2、jmeter集群搭建 多台机器部署jmeter集群…