ElasticSearch01_简介安装es以及kibana详解倒排索引检索es基本信息增删改查文档
Posted 所得皆惊喜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch01_简介安装es以及kibana详解倒排索引检索es基本信息增删改查文档相关的知识,希望对你有一定的参考价值。
文章目录
①. ElasticSearch简介
-
①. Elaticsearch,简称为es,是一个基于Lucene的搜索服务器。它提供了一个分布式多用户功能的全文搜索引擎,基于Restful web接口。ElasticSearch是用java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎
(9200:Restful 、http端口 9300:TCP端口) -
②. 突出优点:
- 扩展性好,可部署上百台服务器集群,处理PB级数据。
- 近实时的去索引数据、搜索数据
- 开箱即用的,部署简单
-
③. index索引
动词:相当于mysql的insert
名词:相当于mysql的db -
④. Type类型
在index中,可以定义一个或多个类型
类似于mysql的table,每一种类型的数据放在一起 -
⑤. Document文档
保存在某个index下,某种type的一个数据document,文档是json格式的,document就像是mysql中的某个table里面的内容。每一行对应的列叫属性
Elasticsearch | 关系型数据库Mysql |
---|---|
索引(index) | 数据库(databases) |
类型(type) | 表(table) |
文档(document) | 行(row) |
②. 安装elasticSearch、kibana 7.4.2
- ①. 安装elasticSearch7.4.2详细步骤如下
1. 下载ealastic search(存储和检索)和kibana(可视化检索)
docker pull elasticsearch:7.4.2
docker pull kibana:7.4.2
版本要统一
2. 配置
# 将docker里的目录挂载到linux的/mydata目录中
# 修改/mydata就可以改掉docker里的
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
# es可以被远程任何机器访问
echo "http.host: 0.0.0.0" >/mydata/elasticsearch/config/elasticsearch.yml
# 递归更改权限,es需要访问
chmod -R 777 /mydata/elasticsearch/
3. 启动Elastic search
4. # 9200是用户交互端口 9300是集群心跳端口
# -e指定是单阶段运行
# -e指定占用的内存大小,生产时可以设置32G
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \\
-e "discovery.type=single-node" \\
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \\
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \\
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \\
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \\
-d elasticsearch:7.4.2
# 设置开机启动elasticsearch
docker update elasticsearch --restart=always
- ②. 安装kibana 7.4.2详细步骤如下:
http://192.168.56.10:9200一定要改成自己虚拟机的地址
docker pull kibana:7.4.2
# kibana指定了了ES交互端口9200 # 5600位kibana主页端口
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.10:9200 -p 5601:5601 -d kibana:7.4.2
# 设置开机启动kibana
docker update kibana --restart=always
# 访问Kibana: http://192.168.56.10:5601/app/kibana
③. 详解倒排索引
- ①. 下图是ElasticSearch的索引结构,下边黑色部分是物理结构,上边黄色部分是逻辑结构,逻辑结构也是为了更好的去描述ElasticSearch的工作原理及去使用物理结构中的索引文件
- ②. 逻辑结构部分是一个倒排索引表:
- 将要搜索的文档内容分词,所有不重复的词组成分词列表。
- 将搜索的文档最终以Document方式存储起来。
- 每个词和docment都有关联。
如下:
- ③. 为什么查询快?(它建立一个分词,并且分词和文档相关联)
解释何为倒排索引?
(1). 保存的记录(红海行动、探索红海行动、红海特别行动、红海记录片、特工红海特别探索)
(2). 将内容分词就记录到索引中
(3). 检索:
红海特工行动?查出后计算相关性得分:3号记录命中了2次,且3号本身才有3个单词,2/3,所以3号最匹配
④. 检索es基本信息
-
①. GET /_cat/nodes:查看所有节点
-
②. GET /_cat/health:查看es健康状况
-
③. GET /_cat/master:查看主节点
-
④. GET/_cat/indicies:查看所有索引 ,等价于mysql数据库的show databases;
green open .kibana_task_manager_1 DhtDmKrsRDOUHPJm1EFVqQ 1 0 2 3 40.8kb 40.8kb
green open .apm-agent-configuration vxzRbo9sQ1SvMtGkx6aAHQ 1 0 0 0 230b 230b
green open .kibana_1 rdJ5pejQSKWjKxRtx-EIkQ 1 0 5 1 18.2kb 18.2kb
这3个索引是kibana创建的
⑤. 增删改查文档
- ①. 保存一个数据,保存在哪个索引的哪个类型下(哪张数据库哪张表下),保存时用唯一标识指定
- POST新增。如果不指定id,会自动生成id。指定id就会修改这个数据,并新增版本号;
可以不指定id,不指定id时永远为创建
指定不存在的id为创建
指定存在的id为更新(带了_update操作的),而版本号会根据内容变没变而觉得版本号递增与否 - PUT可以新增也可以修改。PUT必须指定id;由于PUT需要指定id,我们一般用来做修改操作,不指定id会报错
必须指定id、版本号总会增加 - put和java里map.put一样必须指定key-value。而post相当于mysql insert
# # 在customer索引下的external类型下保存1号数据
PUT customer/external/1
# POSTMAN输入
http://192.168.56.10:9200/customer/external/1
"name":"John Doe"
seq_no和version的区别:
(1). 每个文档的版本号"_version" 起始值都为1,每次对当前文档成功操作后都加1
(2). 而序列号"_seq_no"则可以看做是索引的信息 在第一次为索引插入数据时为0,每对索引内数据操作成功一次sqlNO加1,并且文档会记录是第几次操作使它成为现在的情况的
- ②. 查看文档
GET /customer/external/1
http://192.168.56.10:9200/customer/external/1
"_index": "customer",
"_type": "external",
"_id": "1",
"_version": 10,
"_seq_no": 18,//并发控制字段,每次更新都会+1,用来做乐观锁
"_primary_term": 6,//同上,主分片重新分配,如重启,就会变化
"found": true,
"_source":
"name": "John Doe"
乐观锁用法:通过“if_seq_no=1&if_primary_term=1”,当序列号匹配的时候,才进行修改,否则不修改
实例:将id=1的数据更新为name=1,然后再次更新为name=2,起始1_seq_no=18,_primary_term=6
(1). 将name更新为1
PUT http://192.168.56.10:9200/customer/external/1?if_seq_no=18&if_primary_term=6
(2). 将name更新为2,更新过程中使用seq_no=18
PUT http://192.168.56.10:9200/customer/external/1?if_seq_no=18&if_primary_term=6
结果为:(出现更新错误)
(3). 查询新的数据 GET http://192.168.56.10:9200/customer/external/1
(4). 再次更新,更新成功
PUT http://192.168.56.10:9200/customer/external/1?if_seq_no=19&if_primary_term=1
- ③. 更新文档
带了_update的会去检查元数据,如果更新的数据和元数据对比没有变化,则不会叠加版本
POST customer/external/1/_update
"doc":
"name":"111"
或者
//不会检查元数据,它的版本号都会更新,不断的叠加版本
POST customer/external/1
"name":"222"
或者
PUT customer/external/1
"name":"222"
- ④. 删除文档或索引
DELETE customer/external/1
DELETE customer
注:elasticsearch并没有提供删除类型的操作,只提供了删除索引和文档的操作。
实例:删除id=1的数据,删除后继续查询
DELETE http://192.168.56.10:9200/customer/external/1
"_index": "customer",
"_type": "external",
"_id": "1",
"_version": 14,
"result": "deleted",
"_shards":
"total": 2,
"successful": 1,
"failed": 0
,
"_seq_no": 22,
"_primary_term": 6
再次执行DELETE http://192.168.56.10:9200/customer/external/1
"_index": "customer",
"_type": "external",
"_id": "1",
"_version": 15,
"result": "not_found",
"_shards":
"total": 2,
"successful": 1,
"failed": 0
,
"_seq_no": 23,
"_primary_term": 6
GET http://192.168.56.10:9200/customer/external/1
"_index": "customer",
"_type": "external",
"_id": "1",
"found": false
删除索引
实例:删除整个costomer索引数据
删除前,所有的索引http://192.168.56.10:9200/_cat/indices
green open .kibana_task_manager_1 DhtDmKrsRDOUHPJm1EFVqQ 1 0 2 0 31.3kb 31.3kb
green open .apm-agent-configuration vxzRbo9sQ1SvMtGkx6aAHQ 1 0 0 0 283b 283b
green open .kibana_1 rdJ5pejQSKWjKxRtx-EIkQ 1 0 8 3 28.8kb 28.8kb
yellow open customer mG9XiCQISPmfBAmL1BPqIw 1 1 9 1 8.6kb 8.6kb
删除“ customer ”索引
DELTE http://192.168.56.10:9200/customer
响应
"acknowledged": true
删除后,所有的索引http://192.168.56.10:9200/_cat/indices
green open .kibana_task_manager_1 DhtDmKrsRDOUHPJm1EFVqQ 1 0 2 0 31.3kb 31.3kb
green open .apm-agent-configuration vxzRbo9sQ1SvMtGkx6aAHQ 1 0 0 0 283b 283b
green open .kibana_1 rdJ5pejQSKWjKxRtx-EIkQ 1 0 8 3 28.8kb 28.8kb
- ⑤. ES的批量操作——bulk
这里的批量操作,当发生某一条执行发生失败时,其他的数据仍然能够接着执行,也就是说彼此之间是独立的
实例1: 执行多条数据
POST /customer/external/_bulk
"index":"_id":"1"
"name":"John Doe"
"index":"_id":"2"
"name":"John Doe"
#! Deprecation: [types removal] Specifying types in bulk requests is deprecated.
"took" : 318, 花费了多少ms
"errors" : false, 没有发生任何错误
"items" : [ 每个数据的结果
"index" : 保存
"_index" : "customer", 索引
"_type" : "external", 类型
"_id" : "1", 文档
"_version" : 1, 版本
"result" : "created", 创建
"_shards" :
"total" : 2,
"successful" : 1,
"failed" : 0
,
"_seq_no" : 0,
"_primary_term" : 1,
"status" : 201 新建完成
,
"index" : 第二条记录
"_index" : "customer",
"_type" : "external",
"_id" : "2",
"_version" : 1,
"result" : "created",
"_shards" :
"total" : 2,
"successful" : 1,
"failed" : 0
,
"_seq_no" : 1,
"_primary_term" : 1,
"status" : 201
]
实例2:对于整个索引执行批量操作
POST /_bulk
"delete":"_index":"website","_type":"blog","_id":"123"
"create":"_index":"website","_type":"blog","_id":"123"
"title":"my first blog post"
"index":"_index":"website","_type":"blog"
"title":"my second blog post"
"update":"_index":"website","_type":"blog","_id":"123"
"doc":"title":"my updated blog post"
运行结果:
#! Deprecation: [types removal] Specifying types in bulk requests is deprecated.
"took" : 304,
"errors" : false,
"items" : [
"delete" : 删除
"_index" : "website",
"_type" : "blog",
"_id" : "123",
"_version" : 1,
"result" : "not_found", 没有该记录
"_shards" :
"total" : 2,
"successful" : 1,
"failed" : 0
,
"_seq_no" : 0,
"_primary_term" : 1,
"status" : 404 没有该
,
"create" : 创建
"_index" : "website",
"_type" : "blog",
"_id" : "123",
"_version" : 2,
"result" : "created",
"_shards" :
"total" : 2,
"successful" : 1,
"failed" : 0
,
"_seq_no" : 1,
"_primary_term" : 1,
"status" : 201
,
"index" : 保存
"_index" : "website",
"_type" : "blog",
"_id" : "5sKNvncBKdY1wAQmeQNo",
"_version" : 1,
"result" : "created",
"_shards" :
"total" : 2,
"successful" : 1,
"failed" : 0
,
"_seq_no" : 2,
"_primary_term" : 1,
"status" : 201
,
"update" : 更新
"_index" : "website",
"_type" : "blog",
"_id" : "123",
"_version" : 3,
"result" : "updated",
"_shards" :
"total" : 2,
"successful" : 1,
"failed" : 0
,
"_seq_no" : 3,
"_primary_term" : 1,
"status" : 200
]
- ⑥. 样本测试数据(有1000条数据)
https://github.com/elastic/elasticsearch/blob/v7.4.2/docs/src/test/resources/accounts.json
ElasticSearch01_简介详解倒排索引安装es以及kibana检索es基本信息增删改查文档
ElasticSearch01_简介详解倒排索引安装es以及kibana检索es基本信息增删改查文档