一、如何操作 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 索引文档字段的数据类型,如下所示:

es创建索引超时报错 es创建索引命令_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 进行演示。