通过curl命令访问与管理Elasticsearch

开源Elasticsearch提供了一系列RESTful风格的API,您可以通过curl命令或在Kibana、Postman中使用这些API。本文介绍如何通过curl命令访问与管理Elasticsearch实例或Serverless应用

前提条件

访问Elasticsearch

执行如下命令,访问阿里云Elasticsearch实例。

说明

如果系统提示curl command not found,请先执行命令sudo yum install curl,在ECS中安装curl。

curl -u <user>:<password> http://<host>:<port>

变量名

说明

<user>

Elasticsearch实例的访问用户名,或Serverless应用的用户名称,在应用详情页获取

重要
  • 访问Elasticsearch实例时,支持通过elastic账号访问,但建议通过非elastic账号访问。因为修改elastic账号的密码时,密码生效期间会影响服务访问。建议在Kibana控制台中创建一个符合预期的Role角色用户进行访问。具体操作,请参见通过Elasticsearch X-Pack角色管理实现用户权限管控

  • 如果您创建的阿里云Elasticsearch实例的版本中包含with_X-Pack信息,则访问该实例时,必须指定用户名和密码。

<password>

输入Elasticsearch实例或Serverless应用的用户密码。

如果忘记密码,可在Elasticsearch实例详情页的安全配置中重置,或在Serverless应用详情页的基本信息区域重置。更多信息,请参见重置Elasticsearch实例访问密码

<host>

Elasticsearch实例的私网地址,或Serverless应用的公网访问地址。可在Elasticsearch实例或Serverless应用的基本信息区域获取。

<port>

Elasticsearch实例或Serverless应用的访问端口,一般为9200。

Elasticsearch实例访问命令示例:

curl -u <user>:<password> http://es-cn-x0r3****.elasticsearch.aliyuncs.com:9200

Serverless应用访问命令示例:

curl -u qing****-***:<password> http://qin****-***.public.cn-hangzhou.es-serverless.aliyuncs.com:9200

Elasticsearch实例返回结果如下:使用ECS访问ES结果示例

管理Elasticsearch的curl命令

以下介绍通过管理Elasticsearch的curl命令。更多命令,请参见Elasticsearch官方文档

查看Elasticsearch信息

  • 查看Elasticsearch实例健康状况。

    curl -u <user>:<password> -XGET 'http://xxxxx.public.xxxxx.aliyuncs.com:9200/_cat/health?v'
  • 查看Elasticsearch实例或Serverless应用中包含的索引信息。

    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'

Elasticsearch实例返回结果如下:删除索引

常见问题

Windows系统终端连接Elasticsearch时,如何安装curl命令,并通过curl命令访问集群?