ElasticSearch 入门需要了解的概念

引言:ElasticSearch 的定位与应用

ElasticSearch 是一个分布式搜索和分析引擎。想象它是一个超大的图书馆:

  • 可以快速找到任何书籍(搜索能力)
  • 可以统计各类书籍的数量(分析能力)
  • 可以随时添加新书架(可扩展性)
  • 即使某个书架损坏,其他书架的书仍然可读(高可用性)

主要应用场景:

  1. 网站搜索
  2. 日志分析
  3. 指标监控
  4. 业务数据分析

一、基础概念

1.1 索引(Index)

什么是索引?

把索引理解为一个数据库:

  • 传统数据库:Database → Table → Row → Column
  • ElasticSearch:Index → Type* → Document → Field
    (*注:Type 概念在新版本已弃用)
json 复制代码
// 创建索引
PUT /books
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "author": { "type": "keyword" },
      "publish_date": { "type": "date" }
    }
  }
}
索引命名规范:
  • 只能小写字母
  • 不能包含 , /, *, ?, ", <, >, |, (空格), , #
  • 不能以 -, _, + 开头
  • 不能是 . 或 ...

1.2 文档(Document)

文档是索引中的一条记录,类似数据库中的一行数据。

json 复制代码
// 添加文档
PUT /books/_doc/1
{
  "title": "ElasticSearch 入门指南",
  "author": "张三",
  "publish_date": "2024-01-01"
}

文档特点:

  • 使用 JSON 格式
  • 每个文档都有唯一的 _id
  • 文档字段可以动态添加

1.3 字段类型(Field Types)

常见数据类型:

json 复制代码
{
  "mappings": {
    "properties": {
      "text_field": { "type": "text" },         // 全文搜索
      "keyword_field": { "type": "keyword" },   // 精确值
      "date_field": { "type": "date" },         // 日期
      "long_field": { "type": "long" },         // 长整型
      "double_field": { "type": "double" },     // 浮点型
      "boolean_field": { "type": "boolean" },   // 布尔值
      "object_field": { "type": "object" }      // 对象
    }
  }
}

二、集群相关概念

2.1 节点(Node)与集群(Cluster)

想象一个图书馆系统:

  • 集群 = 整个图书馆系统
  • 节点 = 单个图书馆分馆

节点类型:

yaml 复制代码
# elasticsearch.yml 配置示例
node:
  name: node-1
  # 节点角色配置
  master: true    # 管理员
  data: true      # 图书管理员
  ingest: false   # 图书分类员

2.2 分片(Shard)与副本(Replica)

类比图书管理:

  • 分片 = 将书籍分散存放在不同书架
  • 副本 = 重要书籍的备份
json 复制代码
// 设置分片和副本数
PUT /books
{
  "settings": {
    "number_of_shards": 3,    // 分成3个书架
    "number_of_replicas": 1   // 每个书架备份一份
  }
}

三、搜索相关概念

3.1 查询与过滤

两种查询上下文:

  1. Query Context:相关性评分(找最相关的书)
  2. Filter Context:是否匹配(找特定年份的书)
json 复制代码
// 查询示例
GET /books/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "elasticsearch" }}  // Query Context
      ],
      "filter": [
        { "term": { "author": "张三" }},         // Filter Context
        { "range": { "publish_date": { "gte": "2024-01-01" }}}
      ]
    }
  }
}

3.2 分词和分析

分析器的组成:

  1. 字符过滤器:清理特殊字符
  2. 分词器:分割单词
  3. Token 过滤器:转换单词(如:大小写转换)
json 复制代码
// 分析器示例
PUT /books
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": ["lowercase", "stop"]
        }
      }
    }
  }
}

四、基本操作示例

4.1 CRUD 操作

json 复制代码
// 创建文档
POST /books/_doc
{
  "title": "ElasticSearch 实战",
  "author": "李四",
  "publish_date": "2024-02-01"
}

// 读取文档
GET /books/_doc/1

// 更新文档
POST /books/_update/1
{
  "doc": {
    "title": "ElasticSearch 实战(第二版)"
  }
}

// 删除文档
DELETE /books/_doc/1

4.2 简单查询

json 复制代码
// 全文搜索
GET /books/_search
{
  "query": {
    "match": {
      "title": "elasticsearch 入门"
    }
  }
}

// 精确查询
GET /books/_search
{
  "query": {
    "term": {
      "author": "张三"
    }
  }
}

4.3 常用运维命令

bash 复制代码
# 查看集群健康状态
GET /_cluster/health

# 查看索引信息
GET /_cat/indices?v

# 查看节点信息
GET /_cat/nodes?v

五、常见误区和注意事项

  1. 分片数设置误区

    • ❌ 分片越多越好
    • ✅ 根据数据量合理设置,建议单个分片 20-50GB
  2. 字段类型选择

    • ❌ 所有文本都用 text 类型
    • ✅ 精确值匹配用 keyword 类型
  3. 映射设置

    • ❌ 依赖动态映射
    • ✅ 生产环境明确定义映射

六、概念关系图

Cluster Node 1 Node 2 Index 1 Index 2 Primary Shard Replica Shard Document 1 Document 2

七、进阶学习建议

  1. 深入学习路径:

    • 掌握基本 CRUD 操作
    • 学习复杂查询和聚合
    • 理解分布式原理
    • 性能优化和运维
  2. 推荐资源:

    • 官方文档
    • ElasticStack 视频教程
    • 《ElasticSearch 实战》
    • Stack Overflow ES 标签

总结

ElasticSearch 的核心概念构成了一个层次分明的体系:

  • 集群由节点组成
  • 节点存储索引
  • 索引包含文档
  • 文档包含字段

理解这些基本概念是掌握 ElasticSearch 的基础。随着实践的深入,你会逐渐理解这些概念之间的关联和应用。

相关推荐
L耀早睡8 分钟前
mapreduce打包运行
大数据·前端·spark·mapreduce
姬激薄13 分钟前
MapReduce打包运行
大数据·mapreduce
计算机人哪有不疯的16 分钟前
Mapreduce初使用
大数据·mapreduce
菜鸟冲锋号40 分钟前
Flink SQL、Hudi 、Doris在数据上的组合应用
大数据·flink
尘世壹俗人1 小时前
hadoop.proxyuser.代理用户.授信域 用来干什么的
大数据·hadoop·分布式
鸿乃江边鸟3 小时前
Starrocks的主键表涉及到的MOR Delete+Insert更新策略
大数据·starrocks·sql
maozexijr4 小时前
Flink 的任务槽和槽共享
大数据·flink
问道飞鱼5 小时前
【大数据知识】今天聊聊Clickhouse部署方案
大数据·clickhouse·部署
金融小师妹8 小时前
应用BERT-GCN跨模态情绪分析:贸易缓和与金价波动的AI归因
大数据·人工智能·算法
武子康8 小时前
大语言模型 10 - 从0开始训练GPT 0.25B参数量 补充知识之模型架构 MoE、ReLU、FFN、MixFFN
大数据·人工智能·gpt·ai·语言模型·自然语言处理