Skip to content

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),示例:

json
{
  "name": "Elasticsearch",
  "category": "Search Engine",
  "release_year": 2010
}
  • "name"、"category"、"release_year" 就是字段(Field)

1.4.mapping

Mapping(映射),是定义索引中文档结构(schema)的机制,相当于数据库中的表结构。

它决定了字段的数据类型、是否可搜索、是否需要全文索引等:

json
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 通过分片实现 分布式存储和查询:

  • 支持大规模数据存储(单个索引超大时,分片可存储在不同节点)
  • 提升查询性能(并行搜索多个分片,提高查询速度)
  • 支持高可用(主分片 + 副本分片)
json
PUT /my_index
{
  "settings": {
    "number_of_shards": 3, // 将索引拆成 3 个 主分片。
    "number_of_replicas": 1 // 每个主分片有 1 个副本(即 3 个主分片 + 3 个副本,共 6 个分片)。
  }
}

1.6.Replica

Replica(副本),是主分片的备份,用于提高查询性能和容灾能力。当某个节点宕机时,副本可用来提供数据,保证高可用性:

  • 默认每个主分片至少有一个副本分片
  • 副本分片不能与其主分片存储在同一节点
json
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)
json
// 查询 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,用于统计分析、数据聚合:

json
// 按 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(中文):智能切分,适用于短文本匹配
json
// 创建 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目录下:

安装ik分词器

然后启动的时候,看到:

启动ik分词器