一、如何操作 ES
Elasticsearch 身为强大的全文搜索引擎,提供了各种API,当我们开启了 Elasticsearch 服务后,可以直接在服务器上使用 curl 命令去操作 ES,也可以借助 postman 或者 kibana 等可视化的客户端去操作 ES。
1、curl 命令
// 创建索引
curl -k --user 账号:密码 -H "Content-Type: application/json" -X PUT 'https://ip:port/索引名?pretty' -d '{"mappings": { "properties": { "city": { "type": "keyword" }, "date": { "type": "keyword" }, "today_weather": { "type": "object" }, "quantity": { "type": "long" }, "collection_time": { "type": "date" }, "collection_url": { "type": "keyword" }, "description": { "type": "text" } } }}''
// 查询所有的索引
curl ip:port/_cat/indices?v
// 查询指定索引
curl ip:port/索引名?pretty
// 删除指定索引
curl -k --user 账号:密码 -XDELETE 'https://ip:port/索引名'
2、postman 客户端
与平时工作中的接口测试流程没什么区别,需要注意请求方式的选择(比如GET、PUT、POST、DELETE等),需要熟悉相关API。
3、kibana 客户端
Elastic Stack 生态中的一员,旨在让用户在 ES 中使用图形和图表对数据进行可视化,这里不会进行使用介绍和演示,打算在后面陆续提及对它的使用。
二、ES 检查
ES 检查,包括集群启动检查、集群状态检查、ES索引查询等,使用 curl 命令格式梳理下。
1. 检查 ES 集群是否启动正常
[myes@localhost elasticsearch-6.8.6]$ curl http://192.168.150.130:9200
// 返回:
{
"name" : "iauw7_W",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "gTnpTr3kRx6jlfsFJDJ5QQ",
"version" : {
"number" : "6.8.6",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "3d9f765",
"build_date" : "2019-12-13T17:11:52.013738Z",
"build_snapshot" : false,
"lucene_version" : "7.7.2",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
2. 检查 ES 集群状况
<1>. 集群的状态信息:
curl http://192.168.150.130:9200/_cluster/state
<2>. 集群的健康状况:
curl http://192.168.150.130:9200/_cat/health?v
// 返回:
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1630421887 14:58:07 elasticsearch yellow 1 1 5 5 0 0 5 0 - 50.0%
- 红色:集群中未分配至少一个主分片。
- 黄色:已分配所有主副本,但未分配至少一个副本。
- 绿色:分配所有分片。
3. 检查 ES 索引
// 查询已存在的所有索引
curl http://192.168.150.130:9200/_cat/indices?v
// 返回:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open my_wheater_index H98_pKLeTmO9wcmT2larVg 5 1 0 0 1.2kb 1.2kb
yellow open mytest_index ZFUBp6pGS1eQo4pGIKX09w 5 1 0 0 1.2kb 1.2kb
三、ES 索引的 CRUD
使用 postman 客户端演示对 ES 索引的 CRUD 操作。
1、创建索引
在上篇文章提及过,使用 PUT 方式创建某个索引的几个姿势,这里不再赘述,索引创建成功后会返回:
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "mytest_index"
}
这里有必要提及下,创建索引并通过"mappings"设置文档字段类型这种场景,比如:
PUT 192.168.150.130:9200/mytest_index_0625
{
"mappings":{
"_doc":{
"properties":{
"city":{
"type":"keyword"
},
"date":{
"type":"keyword"
},
"today_weather":{
"type":"object"
},
"quantity":{
"type":"long"
},
"collection_time":{
"type":"date",
// 兼容时间格式
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm||yyyy-MM-dd HH||yyyy-MM-dd||epoch_millis"
},
"collection_url":{
"type":"keyword"
},
"description":{
"type":"text"
}
}
}
}
}
作为基础知识点,有必要梳理下 ES 索引文档字段的数据类型,如下所示:
请注意,以下数据类型:
- keyword:不进行分词,直接索引(关键词搜索),支持模糊查询、精确查询、聚合、排序查询等;
- text:先进行分词,再索引(全文搜索),支持模糊查询、精确查询,但不支持聚合和排序查询;
- string:该类型已在 ES 5.x及之后被移除,不再被使用!!
- date:日期类型,可以通过 "format" 设置和兼容常见的日期格式;
如果同时设置一个字段为 keyword 和 text ,可以通过fields设置多字段,示例如下:
{
"mappings":{
"_doc":{
"properties":{
"collection_url":{
"type":"keyword",
"fields":{
"collection_remarks":{
"type":"text"
}
}
}
}
}
}
}
2、查询索引
使用 GET 方式查询索引
>> 索引创建的信息查询(比如aliases、mappings、settings等)
GET 192.168.150.130:9200/mytest_index?pretty
// 返回:
{
"mytest_index1": {
"aliases": {},
"mappings": {
......
},
"settings": {
......
},
}
}
>> 索引文档等信息查询(比如超时设置,分片数,文档信息等),使用_search:
GET 192.168.150.130:9200/mytest_index/_search?pretty&track_total_hits=true
// 返回:
{
"took" : 14,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 0,
"max_score" : null,
"hits" : [ ]
}
}
- pretty:以 json 格式展示;
- track_total_hits=true:ES 默认查询数据量为1w条,当查询超过1w条时,"hits">"total" 只会展示前1w条,此时可使用该参数解除这个显示限制。
3、删除索引
使用 DELETE 方式删除索引
DELETE 192.168.150.130:9200/mytest_index
// 返回:
{
"acknowledged": true
}
4、更新索引
使用 PUT 方式更新索引
>> 更新settings,ES不能更新分片数,但可以更新副本数
PUT 192.168.150.130:9200/mytest_index_0625/_settings
{
"settings": {
"index": {
// "number_of_shards":"3",
"number_of_replicas": "2"
}
}
}
>> 索引创建之后不能再修改字段类型了,因为ES底层是 Lucene,字段修改会涉及到分词方式、相关度、TF/IDF等倒排的生成等
// PUT 192.168.150.130:9200/mytest_index_0625/_mapping
最后
这篇重点是 ES 检查和 ES 索引的增删改查操作,分别用curl命令、postaman客户端等方式进行演示,是 ES 中最基础的操作。请注意,ES 索引的增删改查不同于 ES 索引文档的增删改查,下篇重点梳理 ES 索引文档的 CRUD 操作,并通过 kibana 进行演示。