【ElasticSearch7.X】学习笔记
- 一、介绍
- 1.1、ElasticSearch
- 1.2、RESTful
- 1.3、数据格式
- 二、下载安装(单机部署)
- 2.1、解压文件
- 2.2、修改配置配置
- 2.3、创建用户并授权
- 2.5、启动
- 三、增删查改
- 3.1、 索引操作
- 3.1.1、增加索引
- 3.1.2、查看索引
- 3.1.2.1、查看所有索引
- 3.1.2.2、查看单个索引
- 3.1.3、删除索引
- 3.2、 文档操作
- 3.2.1、创建文档
- 3.2.2、查看文档
- 3.2.2.1、查询某一个
- 3.2.2.2、全查询
- 3.2.3、修改文档
- 3.2.3.1、覆盖修改(全量更新)
- 3.2.3.1、局部修改
- 3.2.4、删除文档
- 3.2.4.1、通过唯一性标识删除
- 3.2.4.2、条件删除文档
- 3.2.5、复杂语句
- 3.2.5.1、模糊查询
- 3.2.5.2、分页查询
- 3.2.5.3、指定查询数据信息
- 3.2.5.4、排序
- 3.2.5.5、多条件查询
- 3.2.5.6、高亮显示
- 3.2.5.7、聚合查询
一、介绍
1.1、ElasticSearch
The Elastic Stack, 包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化
Elaticsearch,简称为 ES,ES 是一个开源的高扩展的分布式全文搜索引擎,是整个 ElasticStack 技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据
1.2、RESTful
REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful
简单的理解就是,如果想要访问互联网上的资源,就必须向资源所在的服务器发出请求,请求体中必须包含资源的网络路径,以及对资源进行的操作(增删改查)
1.3、数据格式
Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。为了方便大家理解,我们将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比
Elasticsearch 7.X 中, Type 的概念已经被删除了
二、下载安装(单机部署)
Elasticsearch 的官方地址
本文使用 7.8.0 版本
将下载的文件上传到服务器中
2.1、解压文件
tar -zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz
在解压的文件里新建data、并将新建的data和已有的logs文件夹 赋权777
mkdir elasticsearch/data
2.2、修改配置配置
elasticsearch-7.8.0/config/elasticsearch.yml
# 集群名字
cluster.name: elk
# node名字
node.name: master
# 日志数据路径
path.data: /usr/soft/elasticsearch/data
# 日志路径
path.logs: /usr/soft/elasticsearch/logs
# 是否开始内存交换
bootstrap.memory_lock: false
# 本机地址
network.host: 0.0.0.0
# 开启端口9200
http.port: 9200
# 开启跨域访问支持,默认为false
http.cors.enabled: true
cluster.initial_master_nodes: ["master"]
修改/etc/security/limits.conf
# 在文件末尾中增加下面内容
# 每个进程可以打开的文件数的限制
# * 代表的是linux 所有用户名称
* soft nofile 65536
* hard nofile 65536
修改/etc/security/limits.d/20-nproc.conf
# 在文件末尾中增加下面内容
# 每个进程可以打开的文件数的限制
# * 代表的是linux 所有用户名称
* soft nofile 65536
* hard nofile 65536
# 操作系统级别对每个用户创建的进程数的限制
* hard nproc 4096
修改/etc/sysctl.conf
# 在文件中增加下面内容
# 一个进程可以拥有的 VMA(虚拟内存区域)的数量,默认值为 65536
vm.max_map_count=655360
重新加载
sysctl -p
2.3、创建用户并授权
es不允许root用户启动
useradd elkb
chown -R elkb:elkb /usr/soft/elasticsearch
2.5、启动
#切换成elkb用户
su elkb
#进入bin目录下执行
./elasticsearch
#后台启动
./elasticsearch -d
三、增删查改
3.1、 索引操作
3.1.1、增加索引
对比关系型数据库,创建索引就等同于创建数据库
向 ES 服务器发PUT请求
http://192.168.3.34:9200/shopping
3.1.2、查看索引
向 ES 服务器发GET请求
3.1.2.1、查看所有索引
http://192.168.3.34:9200/_cat/indices?v
表头 | 含义 |
---|---|
health | 当前服务器健康状态:green(集群完整) yellow(单点正常、集群不完整) red(单点不正常) |
status | 索引打开、关闭状态 |
index | 索引名 |
uuid | 索引统一编号 |
pri | 主分片数量 |
rep | 副本数量 |
docs.count | 可用文档数量 |
docs.deleted | 文档删除状态(逻辑删除) |
store.size | 主分片和副分片整体占空间大小 |
pri.store.size | 主分片占空间大小 |
3.1.2.2、查看单个索引
http://192.168.3.34:9200/shopping
{
"shopping"【索引名】: {
"aliases"【别名】: {},
"mappings"【映射】: {},
"settings"【设置】: {
"index"【设置 - 索引】: {
"creation_date"【设置 - 索引 - 创建时间】: "1614265373911",
"number_of_shards"【设置 - 索引 - 主分片数量】: "1",
"number_of_replicas"【设置 - 索引 - 副分片数量】: "1",
"uuid"【设置 - 索引 - 唯一标识】: "eI5wemRERTumxGCc1bAk2A",
"version"【设置 - 索引 - 版本】: {
"created": "7080099"
},
"provided_name"【设置 - 索引 - 名称】: "shopping"
}
}
}
}
3.1.3、删除索引
向 ES 服务器发DELETE请求
http://192.168.3.34:9200/shopping
3.2、 文档操作
这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为 JSON 格式
3.2.1、创建文档
向 ES 服务器发POST请求
# 该请求方式id是ELK自动生成的
http://192.168.3.34:9200/shopping/_doc
# 该请求方式id是自己定义的 同时可以使用put请求方式
http://192.168.3.34:9200/shopping/_doc/001
请求体内容为:
{
"title":"小米手机",
"category":"小米",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":3999.00
}
{
"_index"【索引】: "shopping",
"_type"【类型-文档】: "_doc",
"_id"【唯一标识】: "Xhsa2ncBlvF_7lxyCE9G", #可以类比为 MySQL 中的主键,随机生成
"_version"【版本】: 1,
"result"【结果】: "created", #这里的 create 表示创建成功
"_shards"【分片】: {
"total"【分片 - 总数】: 2,
"successful"【分片 - 成功】: 1,
"failed"【分片 - 失败】: 0
},
"_seq_no": 0,
"_primary_term": 1
}
3.2.2、查看文档
3.2.2.1、查询某一个
向 ES 服务器发GET请求
查看文档时,需要指明文档的唯一性标识,
返回的"_source"是内容体
http://192.168.3.34:9200/shopping/_doc/001
3.2.2.2、全查询
向 ES 服务器发GET请求
http://192.168.3.34:9200/shopping/_search
3.2.3、修改文档
3.2.3.1、覆盖修改(全量更新)
向 ES 服务器发PUT请求
输入相同的 URL 地址请求,如果请求体变化,会将原有的数据内容覆盖
http://192.168.3.34:9200/shopping/_doc/001
请求体内容为:
{
"title":"华为手机",
"category":"华为",
"images":"http://www.gulixueyuan.com/hw.jpg",
"price":3999.00
}
3.2.3.1、局部修改
向 ES 服务器发POST请求
http://192.168.3.34:9200/shopping/_update/001
请求体内容为要修改的内容:
{
"doc":{
"title":"苹果手机"
}
}
3.2.4、删除文档
3.2.4.1、通过唯一性标识删除
删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)
向 ES 服务器发DELETE请求
http://192.168.3.34:9200/shopping/_update/001
3.2.4.2、条件删除文档
向 ES 服务器发POST请求
http://192.168.3.34:9200/shopping/_delete_by_query
请求体内容为:
{
"query":{
"match":{
"price":3999.00
}
}
}
{
"took"【耗时】: 175,
"timed_out"【是否超时】: false,
"total"【总数】: 2,
"deleted"【删除数量】: 2,
}
3.2.5、复杂语句
3.2.5.1、模糊查询
向 ES 服务器发GET请求
http://192.168.3.34:9200/shopping/_search
请求体:
{
"query":{
"match":{ //match:模糊查询;match_all:全部查询 match_phrase:完全匹配(不会拆词查询)
"category":"小米"
}
}
}
3.2.5.2、分页查询
向 ES 服务器发GET请求
http://192.168.3.34:9200/shopping/_search
请求体:
{
"query":{
"match":{
"category":"小米"
}
},
"from":0, //from:第几个开始
"size":2 //size:每页几个
}
3.2.5.3、指定查询数据信息
向 ES 服务器发GET请求
http://192.168.3.34:9200/shopping/_search
请求体:
{
"query":{
"match":{
"category":"小米"
}
},
"from":0,
"size":2,
"_source":["title"] //要显示的信息
}
3.2.5.4、排序
向 ES 服务器发GET请求
http://192.168.3.34:9200/shopping/_search
请求体:
{
"query":{
"match":{
"category":"小米"
}
},
"from":0,
"size":2,
"_source":["title"],
"sort":{ //sort:排序
"price":{
"order":"desc" //order:规则
}
}
}
3.2.5.5、多条件查询
向 ES 服务器发GET请求
http://192.168.3.34:9200/shopping/_search
请求体:
{
"query":{
"bool":{ //bool:条件
"must":[ //must:条件同时成立 should:条件满足就成立
{
"match":{
"category":"小米"
}
},
{
"match":{
"price":"3999.00"
}
}
],
"filter":{ //filter:条件过滤
"range":{ //range:范围
"price":{
"gt":3000 //gt:大于
}
}
}
}
}
}
3.2.5.6、高亮显示
向 ES 服务器发GET请求
http://192.168.3.34:9200/shopping/_search
{
"query":{
"match":{
"category":"小米"
}
},
"highlight":{ //highlight:高亮
"fields":{ //fields:字段
"category":{}
}
}
}
3.2.5.7、聚合查询
向 ES 服务器发GET请求
http://192.168.3.34:9200/shopping/_search
{
"aggs":{ //聚合操作
"price_group":{ //组名称
"terms":{ // 分组
"field":"price" //分组字段
}
},
"price_avg":{
"avg":{ // 平均值
"field":"price" //分组字段
}
}
},
"size":0 //不显示原始数据
}