Elasticsearch 快速上手:ES 基础配置与操作 – wiki基地

Elasticsearch 快速上手:ES 基础配置与操作

引言

Elasticsearch(简称 ES)是一个开源的分布式搜索和分析引擎,以其强大的全文检索能力、高可扩展性和实时性,在大数据处理、日志分析、搜索服务等领域得到了广泛应用。它基于 Apache Lucene 构建,提供了 RESTful API 接口,方便进行数据操作。本文将带领您快速了解 Elasticsearch 的核心概念、安装配置以及基本的数据操作。

一、Elasticsearch 核心概念

在开始使用 Elasticsearch 之前,了解一些核心概念至关重要:

  • 集群 (Cluster):一个或多个 Elasticsearch 节点(服务器)的集合,共同存储数据并提供索引和搜索功能。一个集群由一个唯一的名称标识(默认为 elasticsearch)。
  • 节点 (Node):运行单个 Elasticsearch 实例的服务器。一个集群可以包含一个或多个节点。
  • 索引 (Index):Elasticsearch 中存储数据的逻辑命名空间,类似于关系型数据库中的“数据库”。它是一系列具有相似特征文档的集合。每个索引都有一个唯一的名称,且名称必须是小写。
  • 文档 (Document):Elasticsearch 中可被索引的最小信息单元,类似于关系型数据库中的“行”。文档以 JSON 格式表示,包含若干个字段(键值对)。
  • 字段 (Field):文档中的一个键值对,包含具体的数据。Elasticsearch 会自动识别字段的数据类型并进行索引。

二、Elasticsearch 安装

为了快速上手,推荐使用 Docker 进行安装。

使用 Docker 安装 (推荐)

  1. 安装 Docker:确保您的系统已安装 Docker 和 Docker Compose。
  2. 创建 Docker 网络
    bash
    docker network create elastic
  3. 拉取 Elasticsearch 镜像
    bash
    docker pull docker.elastic.co/elasticsearch/elasticsearch:8.x.x # 替换 8.x.x 为您希望的版本,例如 8.12.2
  4. 启动 Elasticsearch 容器
    Elasticsearch 8.x 版本默认开启了安全认证。以下是一个单节点启动示例,并获取初始密码和注册令牌:
    bash
    docker run --name es01 --net elastic -p 9200:9200 -p 9300:9300 -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:8.x.x

    首次启动时,控制台会输出 elastic 用户的密码和注册令牌(Enrollment Token),请务必保存这些信息。
  5. 验证安装
    在另一个终端窗口,使用 curl 命令验证 Elasticsearch 是否运行。由于 8.x 版本默认开启安全认证和 HTTPS,您需要提供用户名、密码和证书路径。
    bash
    # 假设证书已从容器复制到本地,例如:
    # docker cp es01:/usr/share/elasticsearch/config/certs/http_ca.crt .
    curl --cacert http_ca.crt -u elastic:<your_password> https://localhost:9200

    其中 <your_password> 是您在启动容器时获得的 elastic 用户密码。

直接下载安装 (备选)

  1. 安装 Java 环境:Elasticsearch 需要 Java 8 或更高版本。
  2. 下载 Elasticsearch:访问 Elasticsearch 官方网站下载对应操作系统的安装包(.tar.gz.zip)。
  3. 解压安装包
    bash
    tar -zxvf elasticsearch-8.x.x-linux-x86_64.tar.gz
    cd elasticsearch-8.x.x/
  4. 启动 Elasticsearch
    bash
    ./bin/elasticsearch

    如果遇到 vm.max_map_count 错误,请运行 sudo sysctl -w vm.max_map_count=262144

三、Elasticsearch 基础配置

Elasticsearch 的主要配置文件位于安装目录下的 config/elasticsearch.yml

一些关键配置项:

  • cluster.name: 集群名称,相同名称的节点会组成一个集群。
  • node.name: 节点名称,唯一标识集群中的每个节点。
  • network.host: 绑定 IP 地址,0.0.0.0 表示监听所有网络接口。生产环境应设置为具体 IP。
  • http.port: HTTP 服务端口,默认为 9200
  • path.data: 数据存储路径,建议配置到非系统盘。
  • path.logs: 日志存储路径。

示例 elasticsearch.yml 配置 (单节点开发环境)

“`yaml
cluster.name: my-application
node.name: node-1
network.host: 0.0.0.0
http.port: 9200

如果是生产环境,请根据实际情况配置安全相关设置

xpack.security.enabled: true

xpack.security.transport.ssl.enabled: true

“`

四、Elasticsearch 基本操作

Elasticsearch 提供了 RESTful API,您可以通过 curl 命令或任何 HTTP 客户端进行交互。以下操作均假设您已成功启动 Elasticsearch,并且对于 8.x 版本,需要根据实际情况添加认证信息 (-u elastic:<your_password> --cacert http_ca.crt 或其他配置)。

1. 索引管理

  • 创建索引
    创建一个名为 my_index 的索引。
    bash
    PUT /my_index

    响应示例:
    json
    {
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "my_index"
    }

  • 查看所有索引
    bash
    GET /_cat/indices?v

    这将返回一个表格形式的当前所有索引的概览。

  • 查看特定索引信息
    bash
    GET /my_index

    查看 my_index 索引的详细配置和映射信息。

  • 删除索引
    bash
    DELETE /my_index

    注意:删除操作不可逆,请谨慎使用。

2. 文档操作

  • 索引文档 (添加/更新)
    如果文档不存在则创建,如果存在则更新(Elasticsearch 内部会删除旧文档并索引新文档)。

    • 自动生成 ID
      bash
      POST /my_index/_doc
      {
      "title": "Elasticsearch 快速上手",
      "author": "张三",
      "content": "这是一个关于 Elasticsearch 基础配置与操作的教程。"
      }

      响应会包含自动生成的 _id

    • 指定 ID
      bash
      PUT /my_index/_doc/1
      {
      "title": "Elasticsearch 快速上手",
      "author": "李四",
      "content": "这是一个关于 Elasticsearch 基础配置与操作的教程。"
      }

      这里我们指定了文档 ID 为 1

  • 获取文档
    根据文档 ID 获取特定文档。
    bash
    GET /my_index/_doc/1

  • 更新文档 (局部更新)
    使用 _update API 进行局部更新,例如只修改 author 字段,而无需重新提交整个文档。
    bash
    POST /my_index/_update/1
    {
    "doc": {
    "author": "王五"
    }
    }

  • 搜索文档
    Elasticsearch 提供了强大的查询 DSL (Domain Specific Language) 进行搜索。

    • 查询所有文档
      bash
      GET /my_index/_search
    • 基本匹配查询 (match query)
      查询 title 字段包含 “Elasticsearch” 的文档。
      bash
      GET /my_index/_search
      {
      "query": {
      "match": {
      "title": "Elasticsearch"
      }
      }
      }
    • 多字段匹配查询 (multi_match query)
      查询 titlecontent 字段包含 “教程” 的文档。
      bash
      GET /my_index/_search
      {
      "query": {
      "multi_match": {
      "query": "教程",
      "fields": ["title", "content"]
      }
      }
      }
    • 范围查询 (range query)
      假设文档中有一个 publish_date 字段,查询 2023-01-012023-12-31 之间的文档。
      bash
      GET /my_index/_search
      {
      "query": {
      "range": {
      "publish_date": {
      "gte": "2023-01-01",
      "lte": "2023-12-31"
      }
      }
      }
      }
  • 删除文档

    • 根据 ID 删除
      bash
      DELETE /my_index/_doc/1
    • 根据查询条件删除 (delete by query)
      删除 author 字段为 “王五” 的所有文档。
      bash
      POST /my_index/_delete_by_query
      {
      "query": {
      "match": {
      "author": "王五"
      }
      }
      }

      注意_delete_by_query 是一个破坏性操作,请务必谨慎使用。

五、Kibana 简介

Kibana 是一个免费且开放的用户界面,可以与 Elasticsearch 协同工作,让您能够可视化 Elasticsearch 数据并管理 Elastic Stack。

如果您使用 Docker Compose 启动了 Elasticsearch,通常也可以很方便地启动 Kibana。在 Kibana 中,您可以使用 Dev Tools (开发工具) 来执行上述的 RESTful API 请求,并查看结果,这比使用 curl 更加直观方便。Kibana 还能帮助您构建仪表盘、监控集群状态等。

总结

通过本文,您应该已经对 Elasticsearch 的基本概念、安装、配置和常用操作有了初步了解。Elasticsearch 的功能远不止于此,它还提供了聚合、分析、安全等高级特性,等待您进一步探索。希望这篇快速上手指南能帮助您开启 Elasticsearch 的学习之旅!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部