Elasticsearch教程:概念、安装及使用详解
Elasticsearch 教程:概念、安装及使用详解
Elasticsearch 是一个开源的分布式、RESTful 风格的搜索和数据分析引擎,能够让你以一个之前从未有过的速度和规模,去探索你的数据。它被广泛应用于全文检索、结构化检索、数据分析、日志分析、安全分析等领域。本教程将详细介绍 Elasticsearch 的核心概念、安装步骤以及基本使用方法,帮助你快速入门并掌握 Elasticsearch。
一、Elasticsearch 核心概念
在深入学习 Elasticsearch 之前,我们需要先了解一些核心概念,这些概念将贯穿整个 Elasticsearch 的使用过程:
1.1 节点 (Node)
一个节点是一个 Elasticsearch 实例,通常运行在一个独立的服务器或虚拟机上。多个节点可以组成一个集群 (Cluster),共同提供服务。节点负责存储数据、执行搜索请求和进行数据分析等操作。
1.2 集群 (Cluster)
集群是由一个或多个节点组成的集合,它们共同工作以存储和处理数据。集群提供高可用性和可扩展性,可以根据需求动态添加或删除节点。每个集群都有一个唯一的名称,默认名称为 "elasticsearch"。
1.3 分片 (Shard)
为了处理海量数据,Elasticsearch 将数据分成多个分片。分片是数据的最小存储单位,每个分片都是一个完整的 Lucene 索引。通过将数据分散到多个分片中,Elasticsearch 可以实现数据的水平扩展和并行处理,从而提高性能和吞吐量。
- 主分片 (Primary Shard): 索引创建时,需要指定主分片的数量。主分片负责接收写入请求并将数据同步到副本分片。一旦索引创建完成,主分片的数量就不能更改。
- 副本分片 (Replica Shard): 副本分片是主分片的副本,用于提供数据冗余和提高读取性能。副本分片的数量可以在索引创建后进行调整。
1.4 索引 (Index)
索引是具有相同结构的文档的集合。在 Elasticsearch 中,索引类似于关系型数据库中的数据库。每个索引都有自己的映射 (Mapping),定义了索引中字段的类型和属性。
1.5 类型 (Type)
在 Elasticsearch 7.x 版本之前,一个索引可以包含多个类型,类型类似于关系型数据库中的表。但在 Elasticsearch 7.x 及之后的版本中,类型的概念已经被移除,一个索引只包含一个默认类型 _doc
。
1.6 文档 (Document)
文档是 Elasticsearch 中存储的基本信息单元,类似于关系型数据库中的行。文档以 JSON 格式表示,由一个或多个字段组成。
1.7 字段 (Field)
字段是文档的组成部分,类似于关系型数据库中的列。每个字段都有一个名称和一个类型,例如 text、keyword、integer、date 等。
1.8 映射 (Mapping)
映射定义了索引中字段的类型和属性,以及如何分析这些字段。它类似于关系型数据库中的表结构。映射可以在创建索引时指定,也可以在之后进行修改。
1.9 倒排索引 (Inverted Index)
倒排索引是 Elasticsearch 实现快速全文搜索的关键。它是一种将文档中的单词映射到包含这些单词的文档列表的数据结构。当用户执行搜索请求时,Elasticsearch 会查找倒排索引,快速找到包含搜索词的文档。
1.10 RESTful API
Elasticsearch 提供了 RESTful API,允许用户通过 HTTP 请求与集群进行交互。用户可以使用各种 HTTP 方法 (GET、POST、PUT、DELETE) 来执行各种操作,例如创建索引、添加文档、执行搜索请求等。
二、Elasticsearch 安装
Elasticsearch 的安装非常简单,支持多种操作系统和安装方式。以下介绍几种常用的安装方式:
2.1 使用包管理器安装 (推荐)
2.1.1 Debian/Ubuntu (APT)
-
导入 Elasticsearch 的 GPG 密钥:
bash
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - -
添加 Elasticsearch 的 APT 源:
bash
sudo sh -c 'echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list' -
更新 APT 软件包列表并安装 Elasticsearch:
bash
sudo apt-get update && sudo apt-get install elasticsearch
2.1.2 Red Hat/CentOS (YUM)
-
添加 Elasticsearch 的 YUM 源:
bash
sudo tee /etc/yum.repos.d/elasticsearch.repo <<EOF
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF -
安装 Elasticsearch:
bash
sudo yum install elasticsearch
2.2 使用压缩包安装
-
下载 Elasticsearch 的压缩包:
可以从 Elasticsearch 官网 (https://www.elastic.co/downloads/elasticsearch) 下载对应版本的压缩包。
-
解压压缩包:
bash
tar -xzf elasticsearch-7.x.x-linux-x86_64.tar.gz -
进入解压后的目录:
bash
cd elasticsearch-7.x.x
2.3 使用 Docker 安装
-
拉取 Elasticsearch 镜像:
bash
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.x.x -
运行 Elasticsearch 容器:
bash
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.x.x-d
: 后台运行容器--name
: 指定容器名称-p 9200:9200
: 将容器的 9200 端口映射到主机的 9200 端口 (HTTP 端口)-p 9300:9300
: 将容器的 9300 端口映射到主机的 9300 端口 (节点间通信端口)-e "discovery.type=single-node"
: 以单节点模式启动 Elasticsearch
2.4 启动 Elasticsearch
安装完成后,可以使用以下命令启动 Elasticsearch:
-
使用包管理器安装:
bash
sudo systemctl start elasticsearch -
使用压缩包安装:
bash
./bin/elasticsearch -
使用 Docker 安装:
已在安装步骤中启动
2.5 验证 Elasticsearch 是否启动成功
可以通过访问 http://localhost:9200/
来验证 Elasticsearch 是否启动成功。如果启动成功,将会看到一个 JSON 格式的响应,包含 Elasticsearch 的版本信息、集群名称等信息。
三、Elasticsearch 使用详解
安装并启动 Elasticsearch 后,我们就可以开始使用它了。以下介绍 Elasticsearch 的基本使用方法,包括创建索引、添加文档、执行搜索请求等。
3.1 使用 Kibana (推荐)
Kibana 是一个开源的数据可视化平台,可以与 Elasticsearch 无缝集成,提供了一个友好的界面来管理和查询 Elasticsearch 中的数据。
3.1.1 安装 Kibana
Kibana 的安装方式与 Elasticsearch 类似,可以参考 Kibana 官方文档 (https://www.elastic.co/guide/en/kibana/current/install.html) 进行安装。
3.1.2 使用 Kibana Dev Tools
安装并启动 Kibana 后,可以通过访问 http://localhost:5601/
进入 Kibana 界面。在左侧导航栏中选择 "Dev Tools",可以打开 Kibana 的开发者工具控制台。在控制台中,可以输入 RESTful API 请求来与 Elasticsearch 进行交互。
3.2 使用 RESTful API
除了使用 Kibana,我们也可以直接使用 curl 等工具发送 HTTP 请求来与 Elasticsearch 进行交互。
3.3 创建索引
在 Elasticsearch 中,数据存储在索引中。创建索引的语法如下:
json
PUT /my_index
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
},
"mappings": {
"properties": {
"title": { "type": "text" },
"content": { "type": "text" },
"author": { "type": "keyword" },
"publish_date": { "type": "date" }
}
}
}
PUT /my_index
: 创建一个名为 "my_index" 的索引。settings
: 索引的设置,例如分片数和副本数。mappings
: 索引的映射,定义了字段的类型和属性。number_of_shards
: 主分片数量。number_of_replicas
: 副本分片数量。properties
: 字段定义。
3.4 添加文档
创建索引后,我们可以向索引中添加文档。添加文档的语法如下:
json
POST /my_index/_doc/1
{
"title": "Elasticsearch 教程",
"content": "这是一篇关于 Elasticsearch 的教程",
"author": "张三",
"publish_date": "2023-10-27"
}
POST /my_index/_doc/1
: 向 "my_index" 索引中添加一个文档,文档 ID 为 "1"。- 如果不指定文档ID, 会自动生成。
3.5 获取文档
可以使用 GET 请求获取指定 ID 的文档:
json
GET /my_index/_doc/1
3.6 搜索文档
Elasticsearch 提供了强大的搜索功能,可以使用各种查询条件来搜索文档。以下是一些常用的搜索示例:
3.6.1 简单搜索
json
GET /my_index/_search
{
"query": {
"match": {
"content": "教程"
}
}
}
match
: 匹配查询,用于搜索包含指定关键词的文档。
3.6.2 多字段搜索
json
GET /my_index/_search
{
"query": {
"multi_match": {
"query": "Elasticsearch 教程",
"fields": ["title", "content"]
}
}
}
multi_match
: 多字段匹配查询,用于在多个字段中搜索包含指定关键词的文档。
3.6.3 精确匹配
json
GET /my_index/_search
{
"query": {
"term": {
"author": "张三"
}
}
}
term
: 词项查询,用于精确匹配关键词。注意:term
查询不会对搜索词进行分词。
3.6.4 范围查询
json
GET /my_index/_search
{
"query": {
"range": {
"publish_date": {
"gte": "2023-01-01",
"lte": "2023-12-31"
}
}
}
}
range
: 范围查询,用于搜索指定范围内的文档。gte
: 大于等于。lte
: 小于等于。
3.6.5 布尔查询
json
GET /my_index/_search
{
"query": {
"bool": {
"must": [
{ "match": { "content": "教程" } },
{ "term": { "author": "张三" } }
],
"must_not": [
{ "match": { "content": "入门" } }
],
"should": [
{ "match": { "title": "Elasticsearch" } }
]
}
}
}
bool
: 布尔查询,用于组合多个查询条件。must
: 必须满足的条件。must_not
: 必须不满足的条件。should
: 可选条件,满足的文档会获得更高的评分。
3.7 更新文档
可以使用 POST 请求更新指定 ID 的文档:
json
POST /my_index/_update/1
{
"doc": {
"content": "这是一篇更新后的 Elasticsearch 教程"
}
}
3.8 删除文档
可以使用 DELETE 请求删除指定 ID 的文档:
json
DELETE /my_index/_doc/1
3.9 删除索引
可以使用 DELETE 请求删除整个索引:
json
DELETE /my_index
四、总结
本文详细介绍了 Elasticsearch 的核心概念、安装步骤以及基本使用方法。通过学习本教程,你应该已经掌握了 Elasticsearch 的基本知识,并能够使用 Elasticsearch 进行简单的搜索和数据分析。当然,Elasticsearch 的功能远不止这些,还有更多高级特性和用法等待你去探索。建议你参考 Elasticsearch 官方文档 (https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html) 进行深入学习,并结合实际应用场景进行实践,才能更好地掌握 Elasticsearch。希望这篇教程能够帮助你开启 Elasticsearch 的学习之旅!