es的安装和部署
1.elasticsearch安装部署
1.1安装
下载地址:https://www.elastic.co/cn/downloads/(我下载的是7.6.1)
然后解压即可
1.2目录
1.bin 启动文件目录
2.config 配置文件目录
1og4j2 日志配置文件
jvm.options java 虚拟机相关的配置
elasticsearch.ym1 elasticsearch 的配置文件!
3.lib 相关jar包
4.modules 功能模块目录
5.plugins 插件目录
1.3启动
检查自己的Java环境是否配置好
双击,正常运作可以看到以下内容
在网址中输入:localhost:9200 测试一下,看到如下说明启动成功!
1.4 安装可视化界面
elasticsearch-head
(只做数据展示工具,查询语句用kibana)
1.下载地址:https://github.com/mobz/elasticsearch-head
2.安装:解压即可
3.启动:
cd elasticsearch-head
#安装相关依赖
npm install
#启动
npm run start
#访问
http://localhost:9100/
如下:
此时存在跨域问题(只有当两个页面同源,才能交互)
同源(端口,主机,协议三者都相同)
开启跨域:在elasticsearch解压目录config下elasticsearch.yml中添加:
# 开启跨域
http.cors.enabled: true
# 所有人访问
http.cors.allow-origin: "*"
重启elasticsearch
访问网址: http://localhost:9100,连接
1.5 ElasticSearch安装为Windows服务
1.elasticsearch的bin目录下有一个elasticsearch-service.bat
2.cmd 进入bin目录下执行: elasticsearch-service.bat install
3.查看电脑服务es已经存在了
安装kibana
1. 安装
1.下载地址: https://www.elastic.co/cn/downloads/2.安装: 解压即可
3.启动: 双击
访问网址: http://localhost:5601kibana汉化: 编辑器打开 /config/kibana.yml,添加:i18n.locale: "zh-CN"
重启kibana:已经汉化
2.基本使用:
基本Rest命令说明:
2.1 索引以及文档的创建、查询、更新、删除
1.创建:
(1)索引的创建
PUT /索引名
(2)文档的创建
PUT /索引名/文档类型/文档id
在elasticsearch-head中查看,添加成功
(3)创建索引规则
2.查询:
(1)获取索引信息
GET 索引名
#获取该索引信息
GET 索引名/_mapping
#获取索引的映射规则
(2)获取文档信息
GET 索引名/类型名/文档id
(3)补充常用命令 GET _cat/… 获取es集群的信息
GET _cat/health
#查看集群的健康值
GET _cat/indices?v
#查看es包含的所有索引的信息
一些复杂查询:查询匹配
match:匹配(会使用分词器解析(先分析文档,然后进行查询))
_source:过滤字段
sort:排序
form、size 分页
多条件查询:
must 相当于 and
should 相当于 or
must_not 相当于 not (... and ...)
filter 过滤
3.索引的更新:
先创建一个索引,往里面添加三条数据:
POST /索引名/类型名/文档id/_update
#修改索引内容,一定要注意加上"doc"标签
4.删除:
(1)删除索引
DELETE 索引名
(2)删除索引中的某个文档
DELETE 索引名/类型名/文档id
3.索引以及文档的查询
1.简单查询
<这里我自己安装了ik分词器,所以可以实现部分匹配 >
GET /test2/_search?q=name:"张"
#获取test2索引中名字中含有"张"的文档信息
2.复杂查询
1.模糊查询
#match是模糊查询,term是精确查询。
#term和match只管传入的查询条件是否分词,比如“晚会”使用match可以被分词成“晚”“会”两个词进行查询,term不分词就直接用“晚会”进行查询。
#(总结,模糊查询既拆分输入的关键字,也拆分被查询的字段;精确查询只拆分被查询的字段)
2.过滤不想看的字段
_source: []
#过滤字段
3.排序
sort:
#排序
此时我又往test2中添加了一些测试数据,如下
按照年龄进行排序
4.分页查询
from:从查询结果的第几个开始显示
size:一个页面显示几个
5.布尔值bool查询
must:相当于逻辑与 AND
should: 相当于逻辑或 OR
must_not: 实现的是“逻辑非”NOT
filter:过滤器
must:
should:
must_not:
filter:
6.模糊查询的多条件查询
#多个条件直接用“空格”隔开,这一点比MySQL数据库查询方便得多。
7.高亮查询和自定义高亮样式
3.聚合查询
两个核心概念bucket,metric:
对每个组内的数据进行聚合分析,分组,就是bucket
对一个bucket执行的某种聚合分析的操作,比如说求平均值,求最大值,求最小值,就是metric
现在es新建一个索引,添加如三条数据:
1.根据商品名称计算每个商品数量
#size:只获取聚合结果,而不执行聚合原始数据
#aggs:固定语法,要对一份数据执行分组聚合操作
#group_by_name:就是对每个aggs,都要起一个名字,这个名字是随机的,你随便取什么都ok
#terms:根据字段的值进行分组
#field:根据指定的字段的值进行分组
对于返回的数据:
#hits.hits:指定了size是0,所以hits.hits为空,否则会把执行聚合的那些原始数据给你返回回来
#aggregations:聚合结果
#group_by_name:我们指定的某个聚合的名称
#buckets:根据我们指定的field划分出的buckets
#key:每个bucket对应的那个值
#doc_count:这个bucket分组内,有多少个数据
默认的排序规则:按照doc_count降序排序
2.统计郑州地区的个数
3.计算每个商品下的平均价格/最小价格/最大价格/总价
#count:buckets,terms,自动就会有一个doc_count,就相当于是count
#avg:avg aggs 求平均值
#max:求一个bucket内,指定field值最大的那个数据
#min:求一个bucket内,指定field值最小的那个数据
#sum:求一个bucket内,指定field值的总和先分组,再算每组的平均值
4.先计算出平均价格,在让平均价格按照从大到小排序
"collect_mode"
#对于子聚合的计算,有两种方式:
#depth_first 直接进行子聚合的计算
#breadth_first 先计算出当前聚合的结果,针对这个结果在对子聚合进行计算。
"order": { "avg_price": "desc" }
5.按照指定的价格范围区间进行分组,然后在每组内再按照name进行分组,最后再计算每组的平均价格
"ranges": [{},{}]