1.ES的常见术语
索引(index):
用户写入ES集群的逻辑单元。
分片(shard):
一个索引最少一个分片。
将索引的数据分布式的存储在ES集群。
副本(replica):
一个分片可以有0个或多个副本。
为同一个分片数据提供数据冗余。
文档(docment):
实际存储数据的媒介。
这些文档存储在分片中。
主分片和副本分片的区别:
主分片可以用于读写操作(rw)。
副本分片仅能用于读取操作(ro)。
2.ES集群的颜色:
- green
表示所有的主分片和副本分片均正常工作。
- yellow
表示有部分副本分片不正常工作。
- red
表示有部分主分片不正常工作。
3.索引管理
1.查看所有索引
curl -X GET 10.0.0.101:9200/_cat/indices
2.建立新的索引
创建默认索引,默认是一个分片和一个副本:
curl -X PUT 10.0.0.101:9200/index_name
3.创建指定数量的分片和副本
curl -X PUT 10.0.0.101:9200/index_name
{
"settings":{
"number_of_shards": 5,
"number_of_replicas":2
}
}
注意副本数量应该节点数
4.修改副本数量(分片数量无法修改)
curl -X PUT 10.0.0.101:9200/index_name/_setting
{
"number_of_replicas": 2
}
5.删除索引(一般关闭一段时间之后,再采取删除策略)
curl -X DELETE 10.0.0.101:9200/index_name
6.批量删除索引
curl -X DELETE 10.0.0.101:9200/index*
7.索引别名
curl -X POST 10.0.0.101:9200/_aliases
{"actions":[{"add": {"index": "indeaa","alias": "indexbb"}},{"add": {"index": "indeaa","alias": "indexcc"}}]
}
8.查看索引别名
curl -X GET http://10.0.0.101:9200/_aliases
9.删除索引别名
curl -X POST http://10.0.0.101:9200/_aliases
{
"actions":[
{
"remove": {
"index": "indeaa",
"alias": "indexbb"
}
}
]
}
10.修改索引别名(去掉索引别名,再添加即可)
11.关闭索引
curl -X POST 10.0.0.101:9200/indeaa/_close
11.打开索引
curl -X POST 10.0.0.101:9200/indeaa/_open
4.文档的基础操作
1.创建文档
1.1不指定文档id
curl -X POST 10.0.0.101:9200/indexa/_doc
{"name":"lxc","hobby":"k8s"
}
1.2.指定文档id
curl -X POST 10.0.0.101:9200/indexa/_doc/001
{"name":"lxc","hobby":"k8s"
}
2.修改文档
2.1局部修改
curl -X 10.0.0.101:9200/indexa/_doc/001/_update
{"doc":{"name":"lxc","hobby":"jenkins"}
}
2.2全量修改
curl -X 10.0.0.101:9200/indexa/_doc/001
{"name":"lvdou","hobby":"sleep"
}
补充说明:001为文档id,如果是没有指定文档id的文档需要修改,需要使用默认的文档id(可以通过查询文档得到)
3.查看文档
curl -X GET 10.0.0.101:9200/indexa/_doc/_search
4.删除文档
curl -X DELETE 10.0.0.101:9200/indexa/_doc/001
5.文档的批量管理
5.1文档的批量创建
curl -X POST 10.0.0.101:9200/_bulk
{ "create": { "_index": "indexc"} }
{ "aa": "cd","gg":"ll" }
{ "create": { "_index": "indexc","_id": 1002} }
{ "bb": "dc","ff":"kk" }
最后一行必须为空
5.2文档的批量删除
curl -X POST 10.0.0.101:9200/_bulk
{ "update" : {"_id" : "1002", "_index" : "indexc"} }
{ "doc" : {"name" : "uu"} }
{ "update" : {"_id" : "zDyWgZQB__fRPl1kHaXi", "_index" : "indexc"} }
{ "doc" : {"aa" : "aaaaa"} }
5.3文档的批量删除
curl -X POST 10.0.0.101:9200/_bulk
{ "delete": { "_index": "indexc","_id":"1002"} }
5.4批量查询
curl -X POST 10.0.0.101:9200/_mget
{"docs": [{"_index": "indexc","_id": "zDyWgZQB__fRPl1kHaXi"},{"_index": "indexc","_id": "1002"}]
}
6.分词器:
1.内置的标准分词器-分析英文
curl -X GET 10.0.0.101:9200/_analyze
{
"analyzer": "standard",
"text": "My name is Jason Yin, and I'm 18 years old !"
}
标准分词器对中文分析并不友好
安装ik分词器可以解决这个问题
1.cd /usr/share/elasticsearch/plugins/
将elasticsearch-analysis-ik-7.17.5.zip解压
2.重启服务
3.测试ik中文分词器
细粒度拆分
curl -X 10.0.0.101:9200/_analyze
{"analyzer": "ik_max_word","text": "我爱北京天安门!"}
粗粒度拆分
curl -X 10.0.0.101:9200/_analyze
7.自定义分词器
1.进入到IK分词器的插件安装目录
cd /usr/share/elasticsearch/plugins/ik/config
2.自定义字典
cat > wzry.dic <<'EOF'
鲁班七号
二技能
拥有斩杀效果
EOF
3.加载自定义字典
vim IKAnalyzer.cfg.xml
<entry key="ext_dict">wzry.dic</entry>
4.重启es服务
8.安装kibana集成es集群
1.安装kibana
rpm -ivh kibana-7.17.5-x86_64.rpm
2.修改kibana配置文件
vim /etc/kibana/kibana.yml 写入如下内容
# 指定kibana监听的主机地址,默认是localhost。
server.host: "0.0.0.0"
# 指定kibana连接ES集群地址
elasticsearch.hosts: ["http://10.0.0.101:9200","http://10.0.0.102:9200","http://10.0.0.103:9200"]
# 指定kibana的界面为中文简体,默认是英文。
i18n.locale: "zh-CN"
3.启动kibana
systemctl enable --now kibana
4.访问kibana界面
http://10.0.0.101:5601/