ES
安装
安装Parallel Desktop
下载centos7镜像
1 | http://mirrors.aliyun.com/centos/7/isos/x86_64/ |
安装后查看虚拟机IP:
1 | ip a |
使用shellcraft连接虚拟机
安装ftp
使用yum安装报错:
解决办法:
1 | https://blog.csdn.net/wang_magento/article/details/93205584 |
安装vsftpd:
1 | https://www.cnblogs.com/toutou/p/9662390.html |
连接ftp需要关闭防火墙:
1 | https://www.cnblogs.com/zl-huang/p/10218775.html |
使用FileZilla连接服务器
下载JDK8 rpm 包
1 | jdk-8u241-linux-x64.rpm |
安装JDK
1 | rpm -ivh jdk-8u241-linux-x64.rpm |
找到安装目录:
1 | find / -name java |
配置环境变量:
1 | vi /etc/profile |
使配置生效:
1 | source /etc/profile |
验证路径:
1 | echo PATH |
下载ES
1 | https://www.elastic.co/cn/elastic-stack |
解压:
1 | tar -zxvf elasticsearch-7.6.2-linux-x86_64.tar.gz |
elasticsearch.yml核心配置文件
启动
1 | ./elasticsearch |
报错:
即:
es不能用root用户启动
给非root用户授权:
1 | chown -R guanhang ./elasticsearch-7.6.2 |
重新启动
测试启动是否成功
开启远程连接
修改配置文件,es默认只支持localhost连接:
1 | vi elasticsearch.yml |
修改成:
再次启动ES,会报错:
1 | ERROR: [3] bootstrap checks failed |
解决办法:
对于第一个错误:
先切换到root,编辑配置文件:
1 | vi /etc/security/limits.conf |
在末尾添加:
1 | * soft nofile 65536 |
验证修改是否成功:退出所有用户(退出ftp,再登录),验证:
1 | [root@centos-linux guanhang]# ulimit -Hn |
对于第二个错误:
1 | vi /etc/security/limits.d/20-nproc.conf |
1 | vi /etc/sysctl.conf |
对于第三个错误:
再次编辑es配置文件,打开注释:
1 | cluster.initial_master_nodes: ["node-1", "node-2"] |
启动ES,通过本机访问:
1 | http://10.211.55.6:9200/ |
后台方式启动ES:
1 | ./elasticsearch -d |
通过jps可以看到进程号,使用kill命令可以关闭
ES的基本概念:
接近实时
速度很快
索引
在ES中一个索引由一个名字标识(标识全部是小写字母) ,它是一组相似文档的集合。类比关系型数据库的数据库
类型
类型是索引上的一个逻辑上的分类/分区,一个索引可以定义多个类型。类似于关系型数据库表的概念。ES6后不能再一个索引中创建多个类型,ES7之后一个索引中创建多个类型的API彻底删除
映射
相当于表中的schema,用于定义索引中type的结构
文档
一个文档是一个可被索引的基础信息单元,类似于一条记录
安装kibana
1 | rpm -ivh kibana-7.6.2-x86_64.rpm |
安装完成后会在系统中创建一个服务,服务名为kibana
1 | systemctl status kibana |
修改配置文件:
1 | vi /etc/kibana/kibana.yml |
kibana的服务端口号是5601,启动kibana
1 | [root@centos-linux etc]# systemctl restart kibana |
访问kibana服务:
1 | http://10.211.55.6:5601 |
使用kibana
监控信息
1 | GET /_cat/shards 分片信息 |
创建索引
1 | PUT /ems |
索引操作
查询所有索引:
1 | GET /_cat/indices |
查看指定索引
1 | GET /ems |
删除索引
1 | DELETE /ems |
创建索引以及映射
Mapping type的类型:
1 | text,keyword,date,integer,long,double,boolean or ip,geo_point |
1 | PUT /ems |
或者:
1 | DELETE ems |
查看索引:
1 | GET ems/_search |
可以添加查询条件:
1 | GET dangdang/_search |
条件也可以组合:
must是必须满足,must not是必须不满足
should 满足一个条件就可以
1 | GET dangdang/_search |
同时对于地理位置还可以进行距离查询:
同时支持排序:
范围查询:
高亮查询:
聚合分析:
这里size=0标识不展示命中文档
分组查询:
按照city分组
查看映射:
1 | GET /ems/_mapping |
文档操作
添加文档:
ES7之后_doc为默认的类型
1 | PUT /ems/_doc/1 |
也可以不传id,ES会自动生成,但是请求方法要更改成POST
也可以省略类型:
1 | PUT /dangdang/_create/2 |
查询文档
1 | GET /ems/_doc/1 |
query请求体查询:查询、分页查询、排序:
term查询:
注意的是,keyword、date等不会分词,text会分词,除了text之外的都不分词
term查询查询的是分词,es默认使用的是标准分词器,即中文是单字分词
模糊查询:
多字段查询:
multi_match:也是查询分词,先分词后查询
更新文档
使用的索引以及文档的案例:
1 | PUT /dangdang |
注意直接如下方式更新是覆盖而不是更新
1 | POST /dangdang/_doc/1 |
真正的更新方式:
1 | POST /dangdang/_update/1 |
注意上面再添加文档1的时候,添加了一个没有定义的属性bir,但是也能添加成功,并在查询中能够查询出来:
1 | GET /dangdang/_doc/1 |
我们再看下mapping:
1 | GET /dangdang/_mapping |
自动给我们添加了bir的属性以及类型
更新文档也支持脚本的形式:
1 | POST /dangdang/_update/1 |
按照查询结果更新,相当于where条件:
1 | POST /dangdang/_update_by_query |
批量操作
每一个都是独立运行的不会整体回滚
修改配置
ES7以后默认一个分片
1 | PUT ems |
分词
注意这里的text是已经存在的属性
1 | GET dangdang/_analyze |
也可以自动以tokenizer:
1 | GET dangdang/_analyze |