快速入门Elasticsearch:ES安装与基本使用 – wiki大全


快速入门Elasticsearch:ES安装与基本使用

前言

在当今数据爆炸的时代,如何高效地存储、搜索和分析海量数据成为了企业面临的巨大挑战。Elasticsearch(简称ES)作为一款基于Apache Lucene的开源分布式搜索和分析引擎,以其卓越的实时搜索能力、可伸缩性、高可用性以及友好的RESTful API,迅速成为处理大数据的首选方案之一。无论是日志分析、全文检索、业务数据分析还是地理空间搜索,ES都能提供强大而灵活的解决方案。

本文将带领您从零开始,详细了解Elasticsearch的安装过程,并通过实际操作,掌握其基本使用方法,助您快速入门ES的世界。

一、Elasticsearch简介

Elasticsearch是一个高度可伸缩的开源全文本搜索和分析引擎。它允许您存储、搜索和分析大量数据,并且速度非常快。它通常与Kibana(可视化)、Logstash(数据采集)和Beats(轻量级数据采集器)一起构成Elastic Stack(ELK Stack),提供端到端的数据处理和分析解决方案。

主要特点:

  • 分布式: 可以水平扩展到数百台服务器,处理PB级数据。
  • 高可用: 数据分片和副本机制确保数据安全和系统鲁棒性。
  • 实时性: 几乎实时地索引和搜索数据。
  • 全文搜索: 强大的全文搜索能力,支持模糊查询、短语查询等。
  • RESTful API: 通过HTTP/JSON接口进行交互,易于开发和集成。
  • Schema-less: 可以存储和索引结构化、非结构化或半结构化数据。

二、环境准备:Java环境

Elasticsearch是基于Java开发的,因此在安装Elasticsearch之前,您的系统必须已经安装了Java Development Kit (JDK)。Elasticsearch对Java版本有特定的要求,通常建议安装最新的长期支持(LTS)版本,例如OpenJDK 17或OpenJDK 21。

检查Java版本:

打开命令行工具(Windows: cmd 或 PowerShell, Linux/macOS: 终端),输入以下命令:

bash
java -version

如果显示Java版本信息(例如 openjdk version "17.0.9"),则表示Java已安装。如果未安装或版本不符,请前往OpenJDK官网Oracle Java官网 下载并安装合适的JDK版本,并配置好环境变量。

三、Elasticsearch安装

本教程以Linux系统为例进行安装,Windows和macOS的安装步骤类似,主要是下载不同操作系统对应的安装包并解压。

1. 下载Elasticsearch

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

选择您需要的版本(推荐选择最新的稳定版或与您现有Stack组件版本匹配的版本),下载对应的压缩包。通常为 .tar.gz (Linux/macOS) 或 .zip (Windows)。

这里我们以8.x版本为例:

“`bash

进入您希望安装ES的目录

cd /opt

下载Elasticsearch 8.x (请替换为最新的下载链接)

例如:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.2-linux-x86_64.tar.gz

请注意:如果您在中国大陆,可能需要使用代理或通过镜像站下载以提高速度

wget [Elasticsearch 8.x .tar.gz 下载链接]
“`

2. 解压安装包

下载完成后,解压文件:

“`bash
tar -zxvf elasticsearch-8.x.x-linux-x86_64.tar.gz

重命名目录,方便管理

mv elasticsearch-8.x.x elasticsearch
“`

解压后,您会得到一个名为 elasticsearch 的目录,这是Elasticsearch的安装主目录。

3. 配置Elasticsearch(可选但推荐)

进入Elasticsearch的配置目录:

bash
cd /opt/elasticsearch/config

主要配置文件是 elasticsearch.yml。使用文本编辑器打开它:

bash
vi elasticsearch.yml

您可以根据需求修改以下常用配置项:

  • cluster.name: 集群名称,确保在同一个网络中的不同集群有不同的名称,以防节点加入错误的集群。
    yaml
    cluster.name: my-application
  • node.name: 节点名称,方便识别。
    yaml
    node.name: node-1
  • network.host: 绑定IP地址。默认只绑定 localhost,如果需要其他机器访问,可以设置为 0.0.0.0 或具体IP。
    yaml
    network.host: 0.0.0.0
  • http.port: HTTP通信端口,默认为 9200
    yaml
    http.port: 9200
  • discovery.seed_hosts: 集群发现的种子节点列表,在多节点集群中用于互相发现。单节点可以注释掉或保持默认。
    yaml
    # discovery.seed_hosts: ["host1", "host2"]
  • xpack.security.enabled: 在Elasticsearch 8.x版本中,安全性默认是开启的。如果是在开发环境中,为了方便测试,可以暂时禁用安全认证(不推荐在生产环境禁用)。
    yaml
    xpack.security.enabled: false # 禁用安全认证(仅限开发测试环境)

    注意: 禁用安全认证会暴露您的Elasticsearch服务,请务必了解其风险。在生产环境中,强烈建议启用安全认证。

保存并关闭文件。

4. 创建非root用户(Linux/macOS)

Elasticsearch不能以root用户启动,这是一种安全最佳实践。因此,我们需要创建一个专门的用户来运行Elasticsearch。

“`bash

创建用户组

groupadd elasticsearch

创建用户并加入用户组

useradd -g elasticsearch elasticsearch

更改Elasticsearch安装目录的所有者为elasticsearch用户

chown -R elasticsearch:elasticsearch /opt/elasticsearch
“`

5. 调整系统参数(Linux)

为了Elasticsearch的稳定运行,可能需要调整一些系统参数。这些操作通常需要root权限。

  • 最大文件描述符数: 编辑 /etc/security/limits.conf,添加:
    elasticsearch soft nofile 65536
    elasticsearch hard nofile 65536
  • 最大虚拟内存: 编辑 /etc/sysctl.conf,添加:
    vm.max_map_count=262144
    然后执行 sysctl -p 使配置生效。

6. 启动Elasticsearch

切换到 elasticsearch 用户,并启动Elasticsearch:

“`bash

切换用户

su elasticsearch

进入Elasticsearch安装目录

cd /opt/elasticsearch

启动Elasticsearch

./bin/elasticsearch

或者在后台启动 (推荐,但注意日志输出)

./bin/elasticsearch -d

“`

第一次启动可能需要一些时间。如果 xpack.security.enabled 设置为 true,首次启动时会在控制台输出初始的 elastic 用户密码和 kibana 注册token。请务必妥善保存这些信息。

您可以通过访问 http://localhost:9200 来验证Elasticsearch是否成功启动。如果成功,您会看到类似如下的JSON响应:

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

四、Elasticsearch基本使用

Elasticsearch通过RESTful API进行交互,您可以使用任何HTTP客户端(如curl、Postman、浏览器)或各种语言的客户端库来操作它。

以下是一些基本的CRUD(创建、读取、更新、删除)和搜索操作示例,使用curl命令。

1. 创建索引 (Index)

索引是Elasticsearch中存储数据的逻辑命名空间,类似于关系型数据库中的“数据库”。

“`bash

创建一个名为 ‘products’ 的索引

curl -X PUT “localhost:9200/products?pretty”
“`

响应:

json
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "products"
}

?pretty 参数用于美化JSON输出。

2. 插入文档 (Document)

文档是Elasticsearch中存储的基本单元,类似于关系型数据库中的“行”。每个文档都有一个唯一的ID。

“`bash

插入文档,ES会自动生成ID

curl -X POST “localhost:9200/products/_doc?pretty” -H ‘Content-Type: application/json’ -d’
{
“name”: “Laptop Pro”,
“category”: “Electronics”,
“price”: 1200.00,
“description”: “Powerful laptop for professionals”,
“tags”: [“laptop”, “pro”, “fast”]
}

插入文档,指定ID为 ‘1’

curl -X PUT “localhost:9200/products/_doc/1?pretty” -H ‘Content-Type: application/json’ -d’
{
“name”: “Smartphone X”,
“category”: “Electronics”,
“price”: 800.00,
“description”: “Latest smartphone with advanced features”,
“tags”: [“mobile”, “tech”, “new”]
}

“`

3. 读取文档 (Read)

根据ID获取文档:

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

响应:

json
{
"_index" : "products",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "Smartphone X",
"category" : "Electronics",
"price" : 800.00,
"description" : "Latest smartphone with advanced features",
"tags" : [
"mobile",
"tech",
"new"
]
}
}

_source 字段包含了原始文档内容。

4. 更新文档 (Update)

更新文档可以通过两种方式:

  • 完全替换 (PUT): 使用 PUT 方法重新提交一个完整的新文档,它会完全替换旧文档。
    bash
    curl -X PUT "localhost:9200/products/_doc/1?pretty" -H 'Content-Type: application/json' -d'
    {
    "name": "Smartphone X (Updated)",
    "category": "Electronics",
    "price": 850.00,
    "description": "Latest smartphone with advanced features and camera",
    "tags": ["mobile", "tech", "new", "camera"]
    }
    '
  • 部分更新 (POST with _update): 使用 POST 方法向 _update 端点发送一个包含 doc 字段的部分文档,ES会合并更新。
    bash
    curl -X POST "localhost:9200/products/_update/1?pretty" -H 'Content-Type: application/json' -d'
    {
    "doc": {
    "price": 860.00,
    "stock": 150
    }
    }
    '

5. 删除文档 (Delete)

根据ID删除文档:

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

响应:

json
{
"_index" : "products",
"_id" : "1",
"_version" : 3,
"_seq_no" : 3,
"_primary_term" : 1,
"result" : "deleted"
}

6. 搜索文档 (Search)

搜索是Elasticsearch的核心功能。最简单的搜索是全文搜索。

  • 匹配所有文档:
    bash
    curl -X GET "localhost:9200/products/_search?pretty"
  • 基于查询字符串搜索:
    “`bash
    # 搜索包含 “laptop” 关键字的文档
    curl -X GET “localhost:9200/products/_search?q=laptop&pretty”

    搜索 price 字段大于 1000 的文档

    curl -X GET “localhost:9200/products/_search?q=price:>1000&pretty”
    “`
    * 使用请求体(Query DSL)进行高级搜索:
    这是Elasticsearch最强大、最灵活的搜索方式。

    “`bash

    搜索 category 为 “Electronics” 且 price 大于 1000 的文档

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

    全文搜索 “powerful laptop”

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

    “`

7. 删除索引

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

响应:

json
{
"acknowledged" : true
}

五、Kibana简介与安装(可选)

Kibana是Elastic Stack的另一个重要组件,它提供了一个强大的Web界面,用于搜索、查看和与存储在Elasticsearch索引中的数据进行交互。它让数据的可视化变得简单易行。

  1. 下载Kibana: 访问Kibana官方下载页面,下载与Elasticsearch版本匹配的Kibana。
  2. 解压Kibana: 将下载的压缩包解压到您选择的目录。
  3. 配置Kibana: 打开Kibana安装目录下的 config/kibana.yml 文件。
    主要配置项:

    • server.port: Kibana的端口,默认为 5601
    • server.host: Kibana绑定的IP地址。
    • elasticsearch.hosts: Elasticsearch的地址,默认为 ["http://localhost:9200"]
  4. 启动Kibana:
    bash
    # 进入Kibana安装目录
    cd /opt/kibana
    # 启动Kibana
    ./bin/kibana
  5. 访问Kibana: 在浏览器中访问 http://localhost:5601。您将看到Kibana的欢迎界面。

通过Kibana的Dev Tools,您可以方便地执行上述的RESTful API操作,并且界面更加友好。

总结

至此,您已经成功安装了Elasticsearch,并掌握了其基本的CRUD和搜索操作。这仅仅是Elasticsearch强大功能的冰山一角。接下来,您可以深入学习Elasticsearch的映射(Mapping)、分词器(Analyzer)、聚合(Aggregations)、集群管理、安全性配置以及与Logstash、Kibana等其他Elastic Stack组件的集成,从而构建出更加复杂和强大的数据处理系统。

希望这篇快速入门指南能为您的Elasticsearch学习之旅打下坚实的基础!


滚动至顶部