菜鸟科技网

Elasticsearch命令如何执行?

  1. REST API (最常用):通过发送 HTTP 请求到 Elasticsearch 的不同端点来执行各种操作,这是与 Elasticsearch 交互的标准方式。
  2. Elasticsearch SQL (便捷查询):一种类似 SQL 的查询语言,可以让你用熟悉的 SQL 语法来查询数据。

下面我将详细介绍这两种方式,并提供大量常用命令示例。

Elasticsearch命令如何执行?-图1
(图片来源网络,侵删)

REST API (核心方式)

所有 REST API 请求都遵循一个基本模式:

curl -X<HTTP_METHOD> -u<USER>:<PASSWORD> "<NODE_IP>:<PORT>/<API_ENDPOINT>" -H "Content-Type: application/json" -d'<JSON_BODY>'

参数解释:

  • curl: 一个强大的命令行工具,用于发送 HTTP 请求。
  • -X<HTTP_METHOD>: 指定 HTTP 方法,如 GET (查询), POST (创建/查询), PUT (更新/创建), DELETE (删除)。
  • -u<USER>:<PASSWORD>: (可选,如果开启了安全认证) 用于 Basic Authentication。-u elastic:changeme
  • "<NODE_IP>:<PORT>/<API_ENDPOINT>": Elasticsearch 节点的地址和要访问的 API 端点。http://localhost:9200/_cat/indices
  • -H "Content-Type: application/json": 声明请求体的内容类型是 JSON。
  • -d'<JSON_BODY>': (可选,对于需要数据的请求,如 POST/PUT) 请求体的 JSON 数据。

常用 REST API 命令示例

假设你的 Elasticsearch 运行在 localhost:9200,并且开启了安全认证(默认用户 elastic,密码 changeme)。

集群和节点信息

  • 获取集群健康状态

    curl -u elastic:changeme "localhost:9200/_cluster/health?pretty"
    • pretty: 参数让 JSON 输出格式化,更易读。
  • 获取所有节点信息

    Elasticsearch命令如何执行?-图2
    (图片来源网络,侵删)
    curl -u elastic:changeme "localhost:9200/_cat/nodes?v&pretty"
    • v: (verbose) 显示详细列表。
  • 获取所有索引列表

    curl -u elastic:changeme "localhost:9200/_cat/indices?v&pretty"

索引 管理

  • 创建一个索引

    curl -u elastic:changeme -X PUT "localhost:9200/my_index?pretty" -H 'Content-Type: application/json' -d'
    {
      "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 1
      }
    }
    '
  • 删除一个索引

    curl -u elastic:changeme -X DELETE "localhost:9200/my_index?pretty"
  • 获取索引设置

    Elasticsearch命令如何执行?-图3
    (图片来源网络,侵删)
    curl -u elastic:changeme "localhost:9200/my_index/_settings?pretty"
  • 更新索引设置 (将副本数改为2)

    curl -u elastic:changeme -X PUT "localhost:9200/my_index/_settings" -H 'Content-Type: application/json' -d'
    {
      "number_of_replicas": 2
    }
    '

文档 操作

假设我们有一个名为 my_index 的索引,其类型为 _doc (Elasticsearch 7.x 之后,一个索引只建议一种类型,且默认为 _doc)。

  • 创建/索引一个文档 (指定 ID)

    curl -u elastic:changeme -X PUT "localhost:9200/my_index/_doc/1?pretty" -H 'Content-Type: application/json' -d'
    {
      "user": "kimchy",
      "post_date": "2009-11-15T14:12:12",
      "message": "Trying out Elasticsearch"
    }
    '
    • ID 1 已存在,此操作会覆盖该文档。
  • 创建一个文档 (自动生成 ID)

    curl -u elastic:changeme -X POST "localhost:9200/my_index/_doc?pretty" -H 'Content-Type: application/json' -d'
    {
      "user": "john",
      "post_date": "2025-10-27T10:00:00",
      "message": "Hello from Elasticsearch"
    }
    '
  • 获取一个文档

    curl -u elastic:changeme "localhost:9200/my_index/_doc/1?pretty"
  • 更新一个文档 (部分更新)

    curl -u elastic:changeme -X POST "localhost:9200/my_index/_doc/1/_update?pretty" -H 'Content-Type: application/json' -d'
    {
      "doc": {
        "message": "Updated message for Elasticsearch"
      }
    }
    '
  • 删除一个文档

    curl -u elastic:changeme -X DELETE "localhost:9200/my_index/_doc/1?pretty"

搜索 操作

  • 使用 GET 进行简单搜索 (查询所有文档)

    curl -u elastic:changeme "localhost:9200/my_index/_search?pretty"
  • 使用 POST 进行带条件的搜索

    curl -u elastic:changeme -X POST "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d'
    {
      "query": {
        "match": {
          "message": "Elasticsearch"
        }
      },
      "sort": [
        { "post_date": "desc" }
      ],
      "from": 0,
      "size": 10
    }
    '
    • query: 定义查询条件。
    • match: 一个标准查询,用于分析文本字段。
    • sort: 结果排序。
    • fromsize: 用于分页。
  • 使用 bool 查询进行复杂搜索

    curl -u elastic:changeme -X POST "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d'
    {
      "query": {
        "bool": {
          "must": [
            { "match": { "message": "Elasticsearch" } }
          ],
          "filter": [
            { "range": { "post_date": { "gte": "2025-01-01" } } }
          ]
        }
      }
    }
    '
    • bool: 组合多个查询子句。
    • must: 必须匹配所有子句 (类似 AND)。
    • filter: 必须匹配,但不计算相关度,结果可以被缓存。

Elasticsearch SQL

Elasticsearch 提供了一个 JDBC/ODBC 兼容的接口,让你可以直接用 SQL 查询 Elasticsearch 中的数据。

执行 SQL 查询

通过 /_sql 端点执行。

  • 执行一个简单的 SQL 查询

    curl -u elastic:changeme -X POST "localhost:9200/_sql?pretty" -H 'Content-Type: application/json' -d'
    {
      "query": "SELECT * FROM my_index LIMIT 5"
    }
    '
  • 执行带条件的 SQL 查询

    curl -u elastic:changeme -X POST "localhost:9200/_sql?pretty" -H 'Content-Type: application/json' -d'
    {
      "query": "SELECT user, message FROM my_index WHERE message LIKE '%Elasticsearch%' ORDER BY post_date DESC"
    }
    '

将 SQL 转换为 Query DSL

这对于理解 SQL 背后的 Elasticsearch 查询逻辑非常有用。

curl -u elastic:changeme -X POST "localhost:9200/_sql/translate?pretty" -H 'Content-Type: application/json' -d'
{
  "query": "SELECT user, message FROM my_index WHERE message LIKE '%Elasticsearch%' ORDER BY post_date DESC"
}
'

这个命令会返回等价的 Query DSL JSON,帮助你学习 ES 的查询语法。


其他执行方式

除了命令行,你还可以通过以下方式执行命令:

  1. Kibana Dev Tools: 这是 最推荐 的交互式方式,Kibana 是 Elasticsearch 的官方可视化工具,其内置的 Dev Tools 提供了一个强大的控制台。

    • 你可以直接在 Dev Tools 的控制台中输入 REST API 命令(无需 curl)或 SQL 查询,并立即看到格式化的结果,这是开发和调试的首选工具。
  2. 编程语言客户端: Elasticsearch 为多种主流编程语言提供了官方客户端(如 Java, Python, Go, JavaScript/Node.js, .NET, PHP, Ruby),使用客户端可以更方便地将 Elasticsearch 集成到你的应用程序中。

    • Python 示例 (elasticsearch-py):

      from elasticsearch import Elasticsearch
      es = Elasticsearch(["http://localhost:9200"], basic_auth=("elastic", "changeme"))
      # 创建文档
      doc = {
          "user": "python_user",
          "message": "Hello from Python client"
      }
      es.index(index="my_index", id=2, document=doc)
      # 搜索文档
      res = es.search(index="my_index", query={"match": {"message": "Python"}})
      print(f"Found {res['hits']['total']['value']} documents.")
  3. Elasticsearch 插件: 一些第三方插件可能提供自己的命令行工具或执行接口。

方式 适用场景 优点 缺点
REST API (curl) 自动化脚本、CI/CD 流程、服务器端操作 标准通用,可集成在任何脚本中 命令冗长,调试不便
Elasticsearch SQL 有 SQL 背景的用户,快速数据查询 语法简单直观 功能不如 Query DSL 灵活和强大
Kibana Dev Tools 开发、调试、日常查询 交互式,语法高亮,结果格式化,自动补全 需要启动 Kibana 环境
编程语言客户端 应用程序集成 类型安全,易于管理连接,性能好 需要编写代码

对于初学者和日常使用,强烈建议从 Kibana Dev Tools 开始,它能让你快速理解 Elasticsearch 的工作方式,对于生产环境的自动化任务,REST API (curl)编程客户端 是最佳选择。

分享:
扫描分享到社交APP
上一篇
下一篇