Elasticsearch安装及快速入门
Docker安装Elasticsearch
1.拉起镜像并创建对应的网络连接
拉起镜像
docker pull elasticsearch:7.16.2
创建网络连接,用来与其他容器服务进行通信,比如 Kibana
docker network create -d bridge elasticsearch_network
2.创建容器
配置挂载数据文件夹
Elasticsearch目录介绍:
- bin:脚本目录,包括:启动、停止等可执行脚本
- config:配置文件目录
- data:索引目录,存放索引文件的地方
- logs:日志目录
- modules:模块目录,包括了es的功能模块
- plugins :插件目录,es支持插件机制
Elasticsearch-elasticsearch.yml常用配置:
运行容器
-e "discovery.type=single-node"
设置为单节点特别注意:
-e ES_JAVA_OPTS="-Xms1g -Xmx1g"
测试环境下,设置ES的初始内存和最大内存,否则导致过大启动不了ES
-v /data01/elasticsearch_data/plugins/:/usr/share/elasticsearch/plugins/
配置这个就不用进入容器操作了 直接把ik分词器解压到这个目录
这样es就启动好了。我们可以去检查es是否安装完成,可以输入命令:curl http://localhost:9200
设置 Elasticsearch 随Docker启动(可选):docker update elasticsearch --restart=always
Docker安装可视化Kibana
1.拉起镜像并创建对应的网络连接
拉起镜像
docker pull kibana:7.16.2
2.创建容器
运行容器
-e ELASTICSEARCH_HOSTS=``http://192.168.163.131:9200
: 这里要设置成自己的虚拟机IP地址
-e "I18N_LOCALE=zh-CN"
:这是设置中文
访问 http://localhost:5601 会进入 Kibana 控制台。
Elasticsearch快速入门
简单的集群管理
1.快速检查集群的健康状况
测试一下get方式查询集群状态
GET /_cluster/health
返回结果:
集群的健康情况(status):green、yellow、red?
- green:每个索引的primary shard和replica shard都是active状态的
- yellow:每个索引的primary shard都是active状态的,但是部分replica shard不是active状态,处于不可用的状态
- red:不是所有索引的primary shard都是active状态的,部分索引有数据丢失了
es也提供了一套api,叫做cat api,可以查看es中各种各样的数据
GET /_cat/health?v
2.快速查看集群中有哪些索引
GET /_cat/indices?v
文档(document)的数据格式
- 应用系统的数据结构都是面向对象的,具有复杂的数据结构
- 对象存储到数据库,需要将关联的复杂对象属性插到另一张表,查询时再拼接起来。
- es面向文档,文档中存储的数据结构,与对象一致。所以一个对象可以直接存成一个文档。
- es的document用json数据格式来表达。
文档 document CRUD操作
1.新建图书索引
首先建立图书索引 book
语法:PUT /index
PUT /book
2.新增图书 : 新增文档
语法:PUT /index/type/id
3.查询图书: 检索文档
语法:GET /index/type/id
查看图书:
GET /book/_doc/1
就可看到json形式的文档。
4.修改图书:替换操作
替换操作是整体覆盖,要带上所有信息。
5.修改图书:更新文档
语法:POST /{index}/_update/{id}
6.删除图书:删除文档
语法:DELETE /{index}/type/{id}
如删除id=1的book:DELETE /book/_doc/1
文档document入门
默认自带字段解析
_index
- 含义:此文档属于哪个索引
- 原则:类似数据放在一个索引中。数据库中表的定义规则。如图书信息放在book索引中,员工信息放在employee索引中。各个索引存储和搜索时互不影响。
- 定义规则:英文小写。尽量不要使用特殊字符。order user
_type
- 含义:类别。book java node
- 注意:以后的es9将彻底删除此字段,所以当前版本在不断弱化type。不需要关注。见到type都为_doc。
_id
含义:文档的唯一标识。就像表的id主键。结合索引可以标识和定义一个文档。
生成:手动(put /index/_doc/id)、自动
_source
含义:插入数据时的所有字段和值。在get获取数据时,在_source字段中原样返回。
定制返回字段
就像sql不要select *,而要select name,price from book …一样。
包含:GET /book/_doc/2?_source_includes=name,price
排除:GET /book/_doc/2?_source_excludes=name,price
_version
含义:版本号,不断上升
生成文档id
手动生成id
场景:数据从其他系统导入时,本身有唯一主键。如数据库中的图书、员工信息等。
用法:put /index/_doc/id
自动生成id
用法:POST /index/_doc
自动id特点:长度为20个字符,URL安全,base64编码,GUID,分布式生成不冲突
文档的替换与删除
1.全量替换
执行n次,返回结果中版本号(_version)就会n+1。此过程为全量替换。
2.强制创建
为防止覆盖原有数据,我们在新增时,设置为强制创建,不会覆盖原有文档。
3.删除(lazy delete)
实质:旧文档的内容不会立即删除,只是标记为deleted。适当的时机,集群会将这些文档删除。
4.局部替换(partial update)
使用 PUT /index/type/id
为文档全量替换,需要将文档所有数据提交。
partial update局部替换则只修改变动字段。
优点:
- 大大减少网络传输次数和流量,提升性能
- 减少并发冲突发生的概率。