引言
ElasticSearch 简介
ElasticSearch 是一个开源的搜索和分析引擎,基于 Apache Lucene 构建。它旨在提供高效的全文搜索、实时数据分析和可扩展性。ElasticSearch 由 Shay Banon 于 2010 年创建,最初是为了解决大规模数据搜索的问题。随着时间的推移,它逐渐发展成为一个功能强大的分布式系统,广泛应用于日志分析、监控、推荐系统等领域。
为什么选择 ElasticSearch
ElasticSearch 因其以下优势而备受欢迎:
- 全文搜索:ElasticSearch 提供强大的全文搜索功能,支持复杂的查询和过滤。
- 实时数据分析:它能够快速处理和分析大量数据,提供近乎实时的搜索和分析结果。
- 可扩展性:ElasticSearch 采用分布式架构,可以轻松扩展以处理大规模数据。
- 易用性:提供 RESTful API 接口,方便开发者集成和使用。
本文目标
本文面向初学者,旨在提供一个系统且易于理解的 ElasticSearch 入门指南。我们将从环境搭建开始,逐步介绍核心概念和基础操作,帮助读者快速掌握 ElasticSearch 的基本用法。
安装 ElasticSearch
系统要求
在安装 ElasticSearch 之前,请确保您的系统满足以下要求:
- 操作系统:ElasticSearch 支持 Windows、macOS 和 Linux。
- Java 版本:ElasticSearch 7.x 及以上版本需要 Java 8 或更高版本。建议使用 Oracle JDK 或 OpenJDK。
下载和安装步骤
-
下载 ElasticSearch:
- 访问 ElasticSearch 官方网站 下载最新版本的安装包。
- 选择适合您操作系统的版本(.zip、.tar.gz、.deb、.rpm 等)。
-
安装 ElasticSearch:
-
Windows:
- 解压下载的 .zip 文件到您希望安装的目录。
- 进入
bin
目录,运行elasticsearch.bat
启动 ElasticSearch。
-
macOS:
- 解压下载的 .tar.gz 文件。
- 进入
bin
目录,运行./elasticsearch
启动 ElasticSearch。
-
Linux:
- 解压下载的 .tar.gz 文件。
- 进入
bin
目录,运行./elasticsearch
启动 ElasticSearch。 - 或者使用包管理器安装(.deb、.rpm),具体步骤请参考官方文档。
-
Windows:
验证安装
-
启动 ElasticSearch:
- 按照上述步骤启动 ElasticSearch。
- 启动后,ElasticSearch 将在默认端口 9200 上运行。
-
确认安装成功:
打开浏览器,访问
http://localhost:9200
。-
如果看到类似以下的 JSON 响应,说明安装成功:
{ "name": "your-node-name", "cluster_name": "elasticsearch", "cluster_uuid": "your-cluster-uuid", "version": { "number": "7.x.x", "build_flavor": "default", "build_type": "tar", "build_hash": "your-build-hash", "build_date": "your-build-date", "build_snapshot": false, "lucene_version": "8.x.x", "minimum_wire_compatibility_version": "6.x.x", "minimum_index_compatibility_version": "6.x.x" }, "tagline": "You Know, for Search" }
配置 ElasticSearch
基本配置文件介绍
ElasticSearch 的主要配置文件是 elasticsearch.yml
,位于安装目录的 config
文件夹中。该文件包含了 ElasticSearch 的各种设置,如集群名称、节点名称、网络配置等。
网络配置
要配置 ElasticSearch 的网络设置,请编辑 elasticsearch.yml
文件:
-
IP 地址:设置
network.host
为您希望 ElasticSearch 监听的 IP 地址。默认值为localhost
。 -
端口:设置
http.port
为 ElasticSearch 监听的端口。默认值为9200
。
例如:
network.host: 0.0.0.0
http.port: 9200
集群配置(可选)
对于初学者,单节点配置通常就足够了。如果您对集群配置感兴趣,可以在 elasticsearch.yml
中设置以下参数:
-
集群名称:
cluster.name
用于标识集群。 -
节点名称:
node.name
用于标识节点。 -
发现设置:
discovery.seed_hosts
和cluster.initial_master_nodes
用于配置集群的发现和选举。
例如:
cluster.name: my-cluster
node.name: node-1
discovery.seed_hosts: ["host1", "host2"]
cluster.initial_master_nodes: ["node-1", "node-2"]
核心概念
索引(Index)
定义索引及其在 ElasticSearch 中的作用
索引(Index)是 ElasticSearch 中存储数据的逻辑命名空间,类似于关系型数据库中的数据库。它包含一组具有相似结构的文档。每个索引可以有自己的设置和映射。
演示创建、查看和删除索引的方法
-
创建索引:
curl -X PUT "http://localhost:9200/my_index"
响应:
{"acknowledged":true,"shards_acknowledged":true,"index":"my_index"}
-
查看索引:
curl -X GET "http://localhost:9200/_cat/indices?v"
响应:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size yellow open my_index 1a2b3c4d5e6f7g8h9i0j 1 1 0 0 230b 230b
-
删除索引:
curl -X DELETE "http://localhost:9200/my_index"
响应:
{"acknowledged":true}
文档(Document)
介绍文档的 JSON 结构及其意义
文档(Document)是 ElasticSearch 中的基本数据单元,以 JSON 格式存储。每个文档都属于一个索引,并具有唯一的 ID。文档由字段(fields)组成,每个字段都有名称和值。
展示添加、更新和删除文档的操作
-
添加文档:
curl -X POST "http://localhost:9200/my_index/_doc/1" -H 'Content-Type: application/json' -d' { "name": "John Doe", "age": 30, "city": "New York" }'
响应:
{ "_index": "my_index", "_type": "_doc", "_id": "1", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 0, "_primary_term": 1 }
-
更新文档:
curl -X POST "http://localhost:9200/my_index/_update/1" -H 'Content-Type: application/json' -d' { "doc": { "age": 31 } }'
响应:
{ "_index": "my_index", "_type": "_doc", "_id": "1", "_version": 2, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 1, "_primary_term": 1 }