通过命令行连接集群

本文向您介绍如何通过命令行连接阿里云Elasticsearch(ES)集群。

准备工作

获取集群连接地址

  • VPC私网连接地址:通过VPC私网地址访问ES集群,延迟低,稳定性高。集群创建成功后,VPC私网地址默认开启。

  • 公网连接地址:通过公网访问ES集群,需手动开启:

    登录控制台,在集群配置与管理>安全配置页面,开启公网访问。开关打开后,待集群状态由生效中变更为生效时,表示开启成功。

    image

    重要

    公网地址会降低ES集群的安全性,如必须使用该地址,请设置IP白名单,使用结束后及时关闭。

设置IP白名单

为保障集群安全,您需要将待访问设备的IP地址加入VPC私网或者公网白名单,白名单配置完成后,立即生效,无需重启集群。

  1. 登录阿里云Elasticsearch控制台,在安全配置页面,单击修改设置VPC私网或者公网访问白名单。

    image

  2. 获取待访问设备的IP并将其添加至白名单中。

    Step 1:获取待访问设备IP

    您可以参照以下场景,获取待访问设备的IP地址。

    场景

    需获取的IP地址

    获取方式

    在本地设备中通过命令行连接ES集群。

    本地设备公网IP。

    说明

    如果您的本地设备处在家庭网络或公司局域网中,需要添加局域网的公网出口IP地址。

    通过curl ipinfo.io/ip查询本地设备公网IP。

    ECS实例中通过命令行连接ES集群

    ECSES在不同专有网络中,通过该ECS公网连接ES集群时,需获取ECS的公网IP。

    登录ECS控制台,在实例列表查看实例的公网或者私网IP地址。

    ECSES在同一专有网络中,通过该ECS私网连接ES集群时,需获取ECS的私网IP。

    Step 2:添加白名单

    1. 单击default分组右侧的配置 ,在弹出的对话框中添加IP白名单。

      • 如有需要,也可以单击新增IP白名单分组,自定义分组名称。

      • 分组仅用于IP地址管理,不会影响实际访问权限。所有分组中的IP地址对ES集群的访问权限是一致的。

      image

      配置类别

      格式和示例值

      重要注意事项

      IPv4地址格式

      • 单个IP:192.168.0.1

      • 网段:192.168.0.0/24

        建议将零散的IP合并为IP

      单个集群最多可配置300IP或者IP网段,多个IP或者IP网段之间用英文逗号隔开,且逗号前后不能有空格。

      • 公网默认地址:127.0.0.1,表示禁止所有IPv4地址访问。

      • VPC私网默认值:10.0.0.0/8

      • 0.0.0.0/0:允许所有IPv4访问。

        重要

        强烈建议不要配置 0.0.0.0/0,存在高危风险。

        部分集群版本(如7.16/8.5)和地域不支持 0.0.0.0/0,请以控制台界面或者报错提示为准。

      IPv6地址格式

      (仅杭州地域支持)

      • 单个IP:2401:XXXX:1000:24::5

      • 网段:2401:XXXX:1000::/48

      单个集群最多可配置300IP或者IP网段,多个IP或者IP网段之间用英文逗号隔开,且逗号前后不能有空格。

      • ::1:禁止所有IPv6地址访问

      • ::/0:允许所有IPv6访问

        重要

        强烈建议不要配置 ::/0,存在高危风险。

        部分集群版本不支持 ::/0,请以控制台界面或者报错提示为准。

    2. 配置完成后,单击确认

      image

连接集群

curl命令连接集群:

curl -u '<user>:<password>' 'https://<host>:<port>' -k

参数

说明

user

访问用户名,固定为elastic

password

用户密码。

创建集群时设置密码,支持重置密码

https

访问协议,默认使用http协议。

为了保障集群安全性,建议使用https协议,需手动开启https协议后才能使用。

image

host

集群访问地址,支持:

  • 私网地址

  • 公网地址

登录ES控制台,通过集群基本信息页查看地址。

port

默认端口号为9200,通过集群基本信息页查看端口号。

连接示例:

# 公网访问示例
curl -u 'elastic:Passw0rd!' 'https://es-xx-xxxxxxxxxxxxxxxxx.public.elasticsearch.aliyuncs.com:9200' -k
# 私网访问示例
curl -u 'elastic:Passw0rd!' 'https://es-cn-0pp1****.vpc.elasticsearch.aliyuncs.com:9200' -k

成功返回以下集群信息:

{
  "name" : "es-cn-aic**************-master-i-2",
  "cluster_name" : "es-cn-aic**************",
  "cluster_uuid" : "InmpfI1oQB2ijtdZ******",
  "version" : {
    "number" : "8.17.0",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "0bdf7********************************50279ae7c",
    "build_date" : "2025-03-05T02:31:55.853663566Z",
    "build_snapshot" : false,
    "lucene_version" : "10.0.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

常用命令

查看ES信息

  • 查看ES集群健康状况。

    curl -u '<user>:<password>' -XGET 'http://xxxxx.public.xxxxx.aliyuncs.com:9200/_cat/health?v'
  • 查看ES集群包含的索引信息。

    curl -u '<user>:<password>' -XGET 'http://http://xxxxx.public.xxxxx.aliyuncs.com:9200/_cat/indices?v'

创建索引和文档

  • 创建索引。

    创建一个名称为product_info的索引。

    curl -u '<user>:<password>' -XPUT 'http://xxxxx.public.xxxxx.aliyuncs.com:9200/product_info'
  • 为索引设置mapping。

    设置索引product_info的类型为_doc(7.0及以上版本必须为_doc),包含了productNameannual_ratedescribe字段,并定义了各字段所使用的分词器。

    curl -u '<user>:<password>' -XPUT 'http://xxxxx.public.xxxxx.aliyuncs.com:9200/product_info/_doc/_mapping?include_type_name=true' -H 'Content-Type: application/json' -d '
    {
     "_doc":{
       "properties": {
            "productName": {"type": "text","analyzer": "ik_smart"},
            "annual_rate":{"type":"keyword"},
            "describe": {"type": "text","analyzer": "ik_smart"}
          }
      }
    }'
  • 创建文档并插入数据。

    • 创建单个文档。

      在类型为_docproduct_info索引中,创建了一个名称为1的文档,并向文档中插入一条数据。

      curl -u '<user>:<password>' -XPOST 'http://xxxxx.public.xxxxx.aliyuncs.com:9200/product_info/_doc/1?pretty' -H 'Content-Type: application/json' -d '
      {
      "productName":"testpro",
      "annual_rate":"3.22%",
      "describe":"testpro"
      }'
    • 创建多个文档。

      在类型为_docproduct_info索引中,创建了一个名称为12的文档,并分别向文档中插入了一条数据。

      curl -u '<user>:<password>' -XPOST xxxxx.public.xxxxx.aliyuncs.com:9200/_bulk -H 'Content-Type: application/json' -d'
      { "index" : { "_index": "product_info", "_type" : "_doc", "_id" : "1" } }
      {"productName":"testpro","annual_rate":"3.22%","describe":"testpro"}
      { "index" : { "_index": "product_info", "_type" : "_doc", "_id" : "2" } }
      {"productName":"testpro1","annual_rate":"3.26%","describe":"testpro"}'

搜索文档

搜索名称为1的文档。

curl -u '<user>:<password>' -XGET 'xxxxx.public.xxxxx.aliyuncs.com:9200/product_info/_doc/1?pretty'

删除索引

删除名称为product_info的索引。

curl -u '<user>:<password>' -XDELETE 'xxxxx.public.xxxxx.aliyuncs.com:9200/product_info'

返回结果如下:删除索引

更多Curl命令使用方式,请参见Elasticsearch官方文档