ES
简介和安装
1、简介
Elasticsearch 是一个基于 Apache Lucene 构建的分布式搜索和分析引擎。它可以快速存储、搜索、分析大量的数据,并且能处理不同类型的数据(结构化、半结构化和非结构化数据)。作为 Elastic Stack 的核心组件,Elasticsearch 在多种场景下应用广泛,特别是在需要实时搜索和分析的场景中。以下是 Elasticsearch 的一些关键特点和功能:
- 分布式架构:能水平扩展,将数据存储在多个节点上,在节点发生故障时,自动重建数据副本,保证系统高可用
- 高效的全文搜索:通过倒排索引,模糊查询和布尔查询等多种查询方式,满足各种搜索需求
- 实时搜索:接近实时的数据索引和查询能力,数据写入后几乎立即可以被查询
- 聚合和分析:可以按时间、地理位置、类别等维度对数据进行分组并统计
1.1.index
Index
(索引) ,是 Elasticsearch 中存储数据的基本单位,类似于关系型数据库中的数据库。
在 ES 中,所有的数据都存储在索引中,每个索引可以包含多个文档,特点:
- 类似于关系型数据库(RDBMS)中的数据库
- 通过索引名称(index name)来操作数据
- 可以为不同的索引定义不同的字段结构(Mappings)
1.2.document
Document
(文档),是 Elasticsearch 存储的基本单位,相当于数据库中的一条记录(row)。
文档使用 JSON 格式存储,每个文档属于一个索引,特点:
- 类似于关系型数据库中的 一行数据
- 每个文档都有一个 唯一 ID
- 结构灵活,不需要预定义字段
1.3.field
Field
(字段),是文档中的键值对(Key-Value),示例:
{
"name": "Elasticsearch",
"category": "Search Engine",
"release_year": 2010
}
- "name"、"category"、"release_year" 就是字段(Field)
1.4.mapping
Mapping
(映射),是定义索引中文档结构(schema)的机制,相当于数据库中的表结构。
它决定了字段的数据类型、是否可搜索、是否需要全文索引等:
PUT /my_index
{
"mappings": {
"properties": {
"name": { "type": "text" },
"category": { "type": "keyword" },
"release_year": { "type": "integer" }
}
}
}
text
类型适用于全文搜索keyword
类型适用于精确匹配(如分类、标签)integer
类型适用于数值数据
1.5.Shard
Shard
(片),Elasticsearch 将索引数据分成多个部分,每个部分称为“分片”(Shard),ES 通过分片实现 分布式存储和查询:
- 支持大规模数据存储(单个索引超大时,分片可存储在不同节点)
- 提升查询性能(并行搜索多个分片,提高查询速度)
- 支持高可用(主分片 + 副本分片)
PUT /my_index
{
"settings": {
"number_of_shards": 3, // 将索引拆成 3 个 主分片。
"number_of_replicas": 1 // 每个主分片有 1 个副本(即 3 个主分片 + 3 个副本,共 6 个分片)。
}
}
1.6.Replica
Replica
(副本),是主分片的备份,用于提高查询性能和容灾能力。当某个节点宕机时,副本可用来提供数据,保证高可用性:
- 默认每个主分片至少有一个副本分片
- 副本分片不能与其主分片存储在同一节点
PUT /my_index/_settings
{
"number_of_replicas": 2 // 每个主分片有 2 个副本(即 1 主 + 2 副)
}
1.7.Query DSL
Query DSL
(查询 DSL),Elasticsearch 使用 DSL(Domain Specific Language
) 来构造查询,支持两种查询:
Term
查询(精准匹配,适用于 keyword)Full-text
查询(全文检索,适用于 text)
// 查询 name 为 "Elasticsearch" 的文档
POST /my_index/_search
{
"query": {
"match": { "name": "Elasticsearch" }
}
}
// 查询 category 为 "Search Engine" 的文档,精确匹配
POST /my_index/_search
{
"query": {
"term": { "category.keyword": "Search Engine" }
}
}
1.8.Aggregation
Aggregation
(聚合),类似 SQL 的 GROUP BY,用于统计分析、数据聚合:
// 按 category 统计文档数量
POST /my_index/_search
{
"size": 0,
"aggs": {
"category_count": {
"terms": { "field": "category.keyword" }
}
}
}
1.9.Analyzer
Analyzer
(分析器),用于分词,决定文本如何存储和搜索。主要由 分词器(Tokenizer)+ 过滤器(Filters) 组成。常见的分析器:
standard
(默认):标准分词器,适用于英文ik_max_word
(中文):最大切分方式,适用于全文搜索ik_smart
(中文):智能切分,适用于短文本匹配
// 创建 ik_max_word 分析器的索引
PUT /my_index
{
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
2、安装
2.1.Windows
在学习阶段,使用 Windows 比较简单。去官网下载: elasticsearch-8.7.1-windows-x86_64
解压后,进入 bin
目录下,运行 elasticsearch.bat
即可。
浏览器安装插件,es-client
添加管理,即可使用了。
或者使用 es-king ,非常好用的小工具。
安装 ik 分词器 直接将文件解压,放入到plugins目录下:

然后启动的时候,看到:
