快速掌握 Elasticsearch:安装与使用 – wiki基地


快速掌握 Elasticsearch:安装与使用

Elasticsearch 不仅仅是一个搜索引擎,它还是一个强大的分布式、RESTful 风格的搜索和数据分析引擎。它以其卓越的速度、可伸缩性和灵活性而闻名,被广泛应用于日志分析、全文搜索、业务数据分析等领域。本文将引导您快速安装 Elasticsearch,并学习其基本使用方法。

1. 什么是 Elasticsearch?为什么选择它?

Elasticsearch (ES) 是一个基于 Apache Lucene 的开源分布式搜索和分析引擎。它能够近实时地存储、搜索和分析大量数据。它的主要优势包括:

  • 分布式架构:可以横向扩展,处理PB级别的数据。
  • 全文搜索:强大的搜索能力,支持复杂的查询语言。
  • 近实时性:数据索引后几乎立即可被搜索。
  • RESTful API:通过 HTTP 协议进行交互,易于开发和集成。
  • 数据分析:聚合功能使其成为一个强大的分析工具。
  • 生态系统:与 Kibana (可视化)、Logstash (数据采集) 和 Beats (轻量级数据采集器) 共同构成 Elastic Stack (ELK Stack),提供完整的解决方案。

2. 环境准备

在安装 Elasticsearch 之前,您需要确保系统上安装了 Java Development Kit (JDK)。Elasticsearch 通常对 Java 版本有特定要求,建议安装 LTS (长期支持) 版本的 JDK,如 Java 17 或 Java 21。

检查 Java 版本:

bash
java -version

如果没有安装或版本不符,请根据您的操作系统下载并安装合适的 JDK 版本。

3. 安装 Elasticsearch

安装 Elasticsearch 有多种方式,这里我们介绍最常见的手动下载和启动方法。

步骤 1:下载 Elasticsearch

访问 Elasticsearch 官方下载页面:https://www.elastic.co/cn/downloads/elasticsearch

选择适合您操作系统的 ZIP/TAR.GZ 包进行下载。例如,下载 elasticsearch-8.x.x-windows-x86_64.zip (Windows) 或 elasticsearch-8.x.x-linux-x86_64.tar.gz (Linux)。

步骤 2:解压安装包

将下载的文件解压到您希望安装 Elasticsearch 的目录。

Linux/macOS:

bash
tar -xzf elasticsearch-8.x.x-linux-x86_64.tar.gz
cd elasticsearch-8.x.x

Windows:

使用压缩软件解压 elasticsearch-8.x.x-windows-x86_64.zip 到一个目录,例如 C:\elasticsearch-8.x.x

步骤 3:基本配置 (可选但推荐)

进入 Elasticsearch 解压目录下的 config 文件夹,编辑 elasticsearch.yml 文件。对于首次使用和单节点测试,可以关注以下几个基本配置:

“`yaml

cluster.name: my-application # 集群名称,建议修改

node.name: node-1 # 节点名称,建议修改

network.host: 0.0.0.0 # 允许外部访问,生产环境请配置具体IP
http.port: 9200 # HTTP API 端口

如果是生产环境或需要持久化数据,建议配置数据和日志路径

path.data: /path/to/data

path.logs: /path/to/logs

为了安全,Elasticsearch 8.x 默认开启了安全认证。

对于开发测试环境,可以禁用安全认证(不推荐在生产环境这样做):

xpack.security.enabled: false
xpack.security.enrollment.enabled: false
xpack.security.http.ssl.enabled: false
xpack.security.transport.ssl.enabled: false
“`

重要提示: Elasticsearch 8.x 版本默认开启了安全认证,这在生产环境中非常重要。但在学习和测试阶段,为了简化操作,暂时禁用 xpack.security.enabled 和相关的 SSL 配置是一个常见的做法。请务必注意,生产环境应严格启用并配置安全认证。

步骤 4:启动 Elasticsearch

Linux/macOS:

在 Elasticsearch 根目录下执行:

bash
./bin/elasticsearch

Windows:

在 Elasticsearch 根目录下,双击 bin/elasticsearch.bat 或在命令行中执行:

bash
.\bin\elasticsearch.bat

等待几秒钟,Elasticsearch 就会启动。您应该能在控制台看到类似 “started” 的信息。

步骤 5:验证安装

打开浏览器或使用 cURL 工具访问 Elasticsearch 的 REST API 端口:

bash
curl http://localhost:9200

您应该会看到一个 JSON 响应,其中包含 Elasticsearch 的版本信息、集群名称等,例如:

json
{
"name" : "node-1",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "...",
"version" : {
"number" : "8.x.x",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "...",
"build_date" : "...",
"build_snapshot" : false,
"lucene_version" : "...",
"minimum_wire_compatibility_version" : "...",
"minimum_index_compatibility_version" : "..."
},
"tagline" : "You Know, for Search"
}

这表明 Elasticsearch 已经成功运行!

4. Elasticsearch 基本使用

Elasticsearch 通过 RESTful API 进行操作。您可以直接使用 cURL 或任何 HTTP 客户端工具与它交互。

核心概念:

  • 索引 (Index):类似于关系型数据库中的“数据库”。是具有相似特性的文档集合。
  • 类型 (Type):在 Elasticsearch 6.x 版本后逐渐废弃,并在 7.x 版本中完全移除。现在,一个索引只包含一种类型的数据。
  • 文档 (Document):可被索引的最小单位,类似于关系型数据库中的“行”。以 JSON 格式表示。
  • 字段 (Field):文档中的键值对,类似于关系型数据库中的“列”。

4.1 索引文档 (Index Documents)

使用 PUTPOST 请求将文档添加到索引。

添加带指定 ID 的文档:

“`bash

创建一个名为 ‘products’ 的索引,并添加 ID 为 ‘1’ 的文档

curl -X PUT “localhost:9200/products/_doc/1?pretty” -H ‘Content-Type: application/json’ -d’
{
“name”: “Elasticsearch in Action”,
“description”: “A comprehensive guide to Elasticsearch.”,
“price”: 49.99,
“category”: “Books”,
“tags”: [“search”, “database”, “big data”]
}

“`

  • products:索引名称。
  • _doc:端点,表示文档。
  • 1:文档的 ID。
  • ?pretty:使 JSON 响应格式化,更易读。

添加自动生成 ID 的文档:

“`bash

添加一个 ID 自动生成的文档到 ‘products’ 索引

curl -X POST “localhost:9200/products/_doc?pretty” -H ‘Content-Type: application/json’ -d’
{
“name”: “Kibana Dashboard”,
“description”: “Visualize your data with Kibana.”,
“price”: 0.00,
“category”: “Tools”,
“tags”: [“visualization”, “monitoring”]
}

“`

4.2 获取文档 (Get Documents)

根据 ID 获取单个文档:

bash
curl -X GET "localhost:9200/products/_doc/1?pretty"

响应会包含 _source 字段,即原始文档数据。

4.3 搜索文档 (Search Documents)

搜索是 Elasticsearch 的核心功能。使用 _search 端点。

搜索所有文档:

bash
curl -X GET "localhost:9200/products/_search?pretty"

简单全文搜索 (URI 搜索):

name 字段中搜索包含 “Elasticsearch” 的文档:

bash
curl -X GET "localhost:9200/products/_search?q=name:Elasticsearch&pretty"

使用请求体搜索 (Query DSL):

Query DSL (Domain Specific Language) 允许您构建复杂而强大的查询。这是 Elasticsearch 推荐的搜索方式。

“`bash

搜索 ‘name’ 字段中包含 ‘Elasticsearch’ 的文档

curl -X GET “localhost:9200/products/_search?pretty” -H ‘Content-Type: application/json’ -d’
{
“query”: {
“match”: {
“name”: “Elasticsearch”
}
}
}

“`

“`bash

组合查询:搜索 ‘category’ 为 ‘Books’ 且 ‘price’ 小于 50 的文档

curl -X GET “localhost:9200/products/_search?pretty” -H ‘Content-Type: application/json’ -d’
{
“query”: {
“bool”: {
“must”: [
{ “match”: { “category”: “Books” } },
{ “range”: { “price”: { “lt”: 50 } } }
]
}
}
}

“`

  • match 查询:进行全文匹配,会分析查询字符串和字段内容。
  • bool 查询:组合多个查询条件 (must, should, must_not, filter)。
  • range 查询:搜索特定范围内的值。

4.4 更新文档 (Update Documents)

更新文档通常有两种方式:

  1. 全量更新 (替换):使用 PUT 操作,用新文档完全替换旧文档。如果文档不存在,则创建。
    bash
    curl -X PUT "localhost:9200/products/_doc/1?pretty" -H 'Content-Type: application/json' -d'
    {
    "name": "Elasticsearch - The Definitive Guide",
    "description": "Updated guide to Elasticsearch.",
    "price": 59.99,
    "category": "Books",
    "tags": ["search", "database", "big data", "update"]
    }
    '
  2. 局部更新 (使用 _update ):只更新文档的特定字段。
    bash
    curl -X POST "localhost:9200/products/_update/1?pretty" -H 'Content-Type: application/json' -d'
    {
    "doc": {
    "price": 55.00,
    "new_field": "This is a new field"
    }
    }
    '

4.5 删除文档 (Delete Documents)

根据 ID 删除单个文档:

bash
curl -X DELETE "localhost:9200/products/_doc/1?pretty"

删除整个索引:

bash
curl -X DELETE "localhost:9200/products?pretty"

5. 结合 Kibana (可选)

Kibana 是 Elastic Stack 的可视化层,允许您:

  • 探索数据:通过强大的查询语言和过滤器分析 Elasticsearch 中的数据。
  • 创建仪表板:将多种可视化图表组合成交互式仪表板。
  • 管理 Elastic Stack:管理索引、用户、安全等。

安装 Kibana 的步骤与 Elasticsearch 类似:下载、解压、配置 kibana.yml (主要是 elasticsearch.hosts 指向您的 ES 实例),然后启动。启动后访问 http://localhost:5601

6. 总结与下一步

通过本文,您已经成功安装了 Elasticsearch 并掌握了其基本的 CRUD (创建、读取、更新、删除) 操作以及简单的搜索功能。Elasticsearch 的功能远不止于此,您可以继续探索以下内容:

  • 映射 (Mapping):定义索引中字段的数据类型和如何被索引。
  • 分析器 (Analyzers):在索引和搜索时如何处理文本数据 (如分词)。
  • 聚合 (Aggregations):强大的数据分析功能,用于统计、分组等。
  • 分布式概念:分片 (Shards) 和副本 (Replicas) 如何工作。
  • 生产部署:多节点集群、安全性、监控和优化。
  • 客户端库:使用各种编程语言 (Java, Python, Node.js 等) 的官方客户端与 Elasticsearch 交互。

Elasticsearch 的学习曲线可能会有些陡峭,但其带来的强大功能和灵活性绝对值得您投入时间。祝您使用愉快!


滚动至顶部