快速入门指南编辑

本指南帮助您学习如何

  • 运行 Elasticsearch 和 Kibana(使用 Elastic Cloud 或在本地 Docker 开发环境中),
  • 将简单(非时间戳)数据集添加到 Elasticsearch,
  • 运行基本搜索。

如果您有兴趣将 Elasticsearch 与 Python 一起使用,请查看 Elastic Search Labs。这是探索人工智能驱动搜索用例的最佳场所,例如使用嵌入、向量搜索和检索增强生成 (RAG)。

运行 Elasticsearch编辑

设置 Elasticsearch 的最简单方法是在 Elastic Cloud 上使用 Elasticsearch Service 创建托管部署。如果您更喜欢管理自己的测试环境,请使用 Docker 安装和运行 Elasticsearch。

  1. 获取免费试用.
  2. 登录 Elastic Cloud
  3. 点击 创建部署
  4. 为您的部署命名。
  5. 点击 创建部署 并下载 elastic 用户的密码。
  6. 点击 继续 打开 Kibana,Elastic Cloud 的用户界面。
  7. 点击 自行探索

向 Elasticsearch 发送请求编辑

您可以使用 REST API 向 Elasticsearch 发送数据和其他请求。这使您可以使用任何发送 HTTP 请求的客户端(例如 curl)与 Elasticsearch 进行交互。您还可以使用 Kibana 的控制台向 Elasticsearch 发送请求。

使用 Kibana

  1. 打开 Kibana 的主菜单(Elastic 徽标附近的“”)并转到 开发工具 > 控制台

    Kibana Console
  2. 在控制台中运行以下测试 API 请求

    $response = $client->info();
    response = client.info
    puts response
    res, err := es.Info()
    fmt.Println(res, err)
    const response = await client.info()
    console.log(response)
    GET /

使用 curl

要使用 curl 或其他客户端与 Elasticsearch 通信,您需要集群的端点。

  1. 打开 Kibana 的主菜单,然后点击 管理此部署
  2. 在您的部署菜单中,转到 Elasticsearch 页面。点击 复制端点
  3. 要提交示例 API 请求,请在新终端会话中运行以下 curl 命令。将 <password> 替换为 elastic 用户的密码。将 <elasticsearch_endpoint> 替换为您的端点。

    curl -u elastic:<password> <elasticsearch_endpoint>/

添加数据编辑

您将数据作为称为文档的 JSON 对象添加到 Elasticsearch。Elasticsearch 将这些文档存储在可搜索的索引中。

添加单个文档编辑

提交以下索引请求以将单个文档添加到 books 索引。该请求会自动创建索引。

response = client.index(
  index: 'books',
  body: {
    name: 'Snow Crash',
    author: 'Neal Stephenson',
    release_date: '1992-06-01',
    page_count: 470
  }
)
puts response
const response = await client.index({
  index: 'books',
  document: {
    name: 'Snow Crash',
    author: 'Neal Stephenson',
    release_date: '1992-06-01',
    page_count: 470,
  }
})
console.log(response)
POST books/_doc
{"name": "Snow Crash", "author": "Neal Stephenson", "release_date": "1992-06-01", "page_count": 470}

响应包括 Elasticsearch 为文档生成的元数据,包括文档在索引中的唯一 _id

展开以查看示例响应
{
  "_index": "books",
  "_id": "O0lG2IsBaSa7VYx_rEia",
  "_version": 1,
  "result": "created",
  "_shards": {
    "total": 2,
    "successful": 2,
    "failed": 0
  },
  "_seq_no": 0,
  "_primary_term": 1
}

添加多个文档编辑

使用 _bulk 端点在一个请求中添加多个文档。批量数据必须是换行符分隔的 JSON (NDJSON)。每行都必须以换行符 (\n) 结尾,包括最后一行。

response = client.bulk(
  body: [
    {
      index: {
        _index: 'books'
      }
    },
    {
      name: 'Revelation Space',
      author: 'Alastair Reynolds',
      release_date: '2000-03-15',
      page_count: 585
    },
    {
      index: {
        _index: 'books'
      }
    },
    {
      name: '1984',
      author: 'George Orwell',
      release_date: '1985-06-01',
      page_count: 328
    },
    {
      index: {
        _index: 'books'
      }
    },
    {
      name: 'Fahrenheit 451',
      author: 'Ray Bradbury',
      release_date: '1953-10-15',
      page_count: 227
    },
    {
      index: {
        _index: 'books'
      }
    },
    {
      name: 'Brave New World',
      author: 'Aldous Huxley',
      release_date: '1932-06-01',
      page_count: 268
    },
    {
      index: {
        _index: 'books'
      }
    },
    {
      name: 'The Handmaids Tale',
      author: 'Margaret Atwood',
      release_date: '1985-06-01',
      page_count: 311
    }
  ]
)
puts response
const response = await client.bulk({
  operations: [
    { index: { _index: 'books' } },
    {
      name: 'Revelation Space',
      author: 'Alastair Reynolds',
      release_date: '2000-03-15',
      page_count: 585,
    },
    { index: { _index: 'books' } },
    {
      name: '1984',
      author: 'George Orwell',
      release_date: '1985-06-01',
      page_count: 328,
    },
    { index: { _index: 'books' } },
    {
      name: 'Fahrenheit 451',
      author: 'Ray Bradbury',
      release_date: '1953-10-15',
      page_count: 227,
    },
    { index: { _index: 'books' } },
    {
      name: 'Brave New World',
      author: 'Aldous Huxley',
      release_date: '1932-06-01',
      page_count: 268,
    },
    { index: { _index: 'books' } },
    {
      name: 'The Handmaids Tale',
      author: 'Margaret Atwood',
      release_date: '1985-06-01',
      page_count: 311,
    }
  ]
})
console.log(response)
POST /_bulk
{ "index" : { "_index" : "books" } }
{"name": "Revelation Space", "author": "Alastair Reynolds", "release_date": "2000-03-15", "page_count": 585}
{ "index" : { "_index" : "books" } }
{"name": "1984", "author": "George Orwell", "release_date": "1985-06-01", "page_count": 328}
{ "index" : { "_index" : "books" } }
{"name": "Fahrenheit 451", "author": "Ray Bradbury", "release_date": "1953-10-15", "page_count": 227}
{ "index" : { "_index" : "books" } }
{"name": "Brave New World", "author": "Aldous Huxley", "release_date": "1932-06-01", "page_count": 268}
{ "index" : { "_index" : "books" } }
{"name": "The Handmaids Tale", "author": "Margaret Atwood", "release_date": "1985-06-01", "page_count": 311}

您应该会收到一个指示没有错误的响应。

展开以查看示例响应
{
  "errors": false,
  "took": 29,
  "items": [
    {
      "index": {
        "_index": "books",
        "_id": "QklI2IsBaSa7VYx_Qkh-",
        "_version": 1,
        "result": "created",
        "_shards": {
          "total": 2,
          "successful": 2,
          "failed": 0
        },
        "_seq_no": 1,
        "_primary_term": 1,
        "status": 201
      }
    },
    {
      "index": {
        "_index": "books",
        "_id": "Q0lI2IsBaSa7VYx_Qkh-",
        "_version": 1,
        "result": "created",
        "_shards": {
          "total": 2,
          "successful": 2,
          "failed": 0
        },
        "_seq_no": 2,
        "_primary_term": 1,
        "status": 201
      }
    },
    {
      "index": {
        "_index": "books",
        "_id": "RElI2IsBaSa7VYx_Qkh-",
        "_version": 1,
        "result": "created",
        "_shards": {
          "total": 2,
          "successful": 2,
          "failed": 0
        },
        "_seq_no": 3,
        "_primary_term": 1,
        "status": 201
      }
    },
    {
      "index": {
        "_index": "books",
        "_id": "RUlI2IsBaSa7VYx_Qkh-",
        "_version": 1,
        "result": "created",
        "_shards": {
          "total": 2,
          "successful": 2,
          "failed": 0
        },
        "_seq_no": 4,
        "_primary_term": 1,
        "status": 201
      }
    },
    {
      "index": {
        "_index": "books",
        "_id": "RklI2IsBaSa7VYx_Qkh-",
        "_version": 1,
        "result": "created",
        "_shards": {
          "total": 2,
          "successful": 2,
          "failed": 0
        },
        "_seq_no": 5,
        "_primary_term": 1,
        "status": 201
      }
    }
  ]
}

搜索数据编辑

索引文档可供近乎实时地进行搜索。

搜索所有文档编辑

运行以下命令以搜索 books 索引中的所有文档

response = client.search(
  index: 'books'
)
puts response
const response = await client.search({
  index: 'books'
})
console.log(response)
GET books/_search

每个匹配结果的 _source 包含索引期间提交的原始 JSON 对象。

match 查询编辑

您可以使用 match 查询来搜索特定字段中包含特定值的文档。这是执行全文搜索的标准查询,包括模糊匹配和短语搜索。

运行以下命令以搜索 books 索引中 name 字段包含 brave 的文档

response = client.search(
  index: 'books',
  body: {
    query: {
      match: {
        name: 'brave'
      }
    }
  }
)
puts response
const response = await client.search({
  index: 'books',
  query: {
    match: {
      name: 'brave'
    }
  }
})
console.log(response)
GET books/_search
{
  "query": {
    "match": {
      "name": "brave"
    }
  }
}

后续步骤编辑

现在 Elasticsearch 已启动并运行,并且您已经了解了基础知识,您可能想要测试更大的数据集或索引您自己的数据。

详细了解搜索查询编辑

添加更多数据编辑

  • 了解如何使用 Kibana 安装示例数据。这是在较大工作负载上测试 Elasticsearch 的一种快速方法。
  • 了解如何使用 Kibana 中的 上传数据 UI 来添加您自己的 CSV、TSV 或 JSON 文件。
  • 使用 批量 API 将您自己的数据集摄取到 Elasticsearch。

Elasticsearch 编程语言客户端编辑

  • 查看我们的 客户端库,以使用您喜欢的编程语言处理您的 Elasticsearch 实例。
  • 如果您使用的是 Python,请查看 Elastic Search Labs,了解使用 Elasticsearch Python 客户端的各种示例。这是探索人工智能驱动搜索用例的最佳场所,例如使用嵌入、向量搜索和检索增强生成 (RAG)。