ElasticSearch 入门需要了解的概念

引言:ElasticSearch 的定位与应用

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

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

主要应用场景:

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

一、基础概念

1.1 索引(Index)

什么是索引?

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

  • 传统数据库:Database → Table → Row → Column
  • ElasticSearch:Index → Type* → Document → Field
    (*注:Type 概念在新版本已弃用)
// 创建索引
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)

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

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

文档特点:

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

1.3 字段类型(Field Types)

常见数据类型:

{"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)

想象一个图书馆系统:

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

节点类型:

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

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

类比图书管理:

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

三、搜索相关概念

3.1 查询与过滤

两种查询上下文:

  1. Query Context:相关性评分(找最相关的书)
  2. Filter Context:是否匹配(找特定年份的书)
// 查询示例
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 过滤器:转换单词(如:大小写转换)
// 分析器示例
PUT /books
{"settings": {"analysis": {"analyzer": {"my_analyzer": {"type": "custom","tokenizer": "standard","filter": ["lowercase", "stop"]}}}}
}

四、基本操作示例

4.1 CRUD 操作

// 创建文档
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 简单查询

// 全文搜索
GET /books/_search
{"query": {"match": {"title": "elasticsearch 入门"}}
}// 精确查询
GET /books/_search
{"query": {"term": {"author": "张三"}}
}

4.3 常用运维命令

# 查看集群健康状态
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 的基础。随着实践的深入,你会逐渐理解这些概念之间的关联和应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/58007.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FreeRTOS 6:任务创建函数xTaskCreate分析

动态创建任务xTaskCreate xTaskCreate 1、申请堆栈内存&#xff08;返回首地址&#xff09; 2、申请任务控制块内存&#xff08;返回首地址&#xff09; 3、把前面申请的堆栈地址&#xff0c;赋值给控制块的堆栈成员 4、调用prvlnitialiseNewTask初始化任务控制块中的成员 …

linux系统安全:开源的反病毒工具ClamAV的安装配置使用和维护介绍

目录 一、概述 1、开发者 2、功能 3、特性 二、安装ClamAV 1、更新系统包列表 2、安装ClamAV 三、更新病毒库 四、配置ClamAV 1、编辑ClamAV配置文件 2、主要配置选项 &#xff08;1&#xff09;/etc/clamd.conf &#xff08;2&#xff09; /etc/freshclam.conf …

windows下安装python库wordCloud报错

换电脑安装wordcloud半天安装失败&#xff0c;记录一下遇到的坑&#xff0c;也给大家节省点时间。 方法1&#xff1a; 错误呢就是下面这个&#xff0c;说没c编译器&#xff0c;要不就去他给的地址上安装一下&#xff0c;我安装了一下好像没什么选&#xff0c;也没太敢勾选吗&a…

2025 - AI人工智能药物设计 - 中药网络药理学和毒理学的研究

中药网络药理学和毒理学的研究 TCMSP&#xff1a;https://old.tcmsp-e.com/tcmsp.php 然后去pubchem选择&#xff1a;输入Molecule Name 然后进行匹配&#xff1a;得到了smiles 再次通过smiles&#xff1a;COC1C(CC(C2C1OC(CC2O)C3CCCCC3)O)O 然后再次输入&#xff1a;http…

C语言基础(五)【控制语句与循环(上)学习篇】

文章目录 前言一、if - else 语句二、switch-case 语句三、while 循环四、for 循环五、do - while 循环六、break 语句七、continue 语句八、go to 语句总结 前言 C语言是结构化的程序设计语言&#xff0c;这里的结构指的是顺序结构、选择结构、循环结构&#xff0c;因此提供了…

中国人寿财险青岛市分公司:科技赋能,车险服务再升级

中国人寿财险青岛市分公司积极响应国家号召&#xff0c;大力推进车险综合改革&#xff0c;以科技赋能车险服务&#xff0c;实现服务再升级。公司利用AI技术&#xff0c;实现车险报案的自动化处理&#xff0c;大幅缩短了理赔周期。同时&#xff0c;公司还通过大数据分析&#xf…

【力扣】[Java版] 刷题笔记-101. 对称二叉树

题目&#xff1a;101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 解题思路 可以理解为遍历对比&#xff0c;最简单的方法就是递归。 解题过程 递归&#xff1a;左右子树分开遍历&#xff0c;左子树遵循根、左、右的顺序&#xff0c;右子树循…

重学SpringBoot3-Spring WebFlux之SSE服务器发送事件

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ Spring WebFlux之SSE服务器发送事件 1. 什么是 SSE&#xff1f;2. Spring Boot 3 响应式编程与 SSE为什么选择响应式编程实现 SSE&#xff1f; 3. 实现 SSE 的基本步骤3.…

(三)第一个Qt程序“Qt版本的HelloWorld”

一、随记 我们在学习编程语言的时候&#xff0c;各种讲解编程语言的书籍中通常都会以一个非常经典的“HelloWorld”程序展开详细讲解。程序虽然简短&#xff0c;但是“麻雀虽小&#xff0c;五脏俱全”&#xff0c;但是却非常适合用来熟悉程序结构、规范&#xff0c;快速形成对编…

sass的使用

SCSS&#xff08;Sassy CSS&#xff09;是Sass的语法之一&#xff0c;提供了更强大的功能和灵活性&#xff0c;可以让CSS更加模块化、可维护。下面是SCSS从简单到高级的使用方法&#xff0c;以及模块化的概念和实践&#xff1a; 1. 基础使用&#xff1a;嵌套规则 SCSS允许使用…

Java程序设计:spring boot(11)——分布式缓存 Ehcache 整合

目录 1 Spring Cache 相关注解说明 1.1 CacheConfig 1.2 Cacheable 1.3 CachePut 1.4 CacheEvict 1.5 Caching 2 环境配置 2.1 pom.xml 依赖添加 2.2 ehcahe.xml ⽂件添加 2.3 application.yml 缓存配置 2.4 启动缓存 2.5 JavaBean 对象实现序列化 3 缓存实现 3.…

技术杂谈与进阶01--------战时操作系统与国产化数据库 |截止到目前修改时间,本文已上全站综合热榜

写文不易 给我点点关注 和点点赞 点点收藏吧 目录 为什么国产化&#xff1f; 操作系统 suse 统信uos 的阉割版 deepin &#xff08;deepin又名深度操作系统&#xff09; 麒麟 的阉割版 -欧拉 debian 的修改残版 ubuntu 国产数据库 开源数据库 部分开源数据库 …

uniapp使用uni-push模拟推送

uniapp使用uni-push模拟推送 第一步先去uniapp开发者中心添加开通uni-push功能 这里的Android 应用签名可以先用测试的官网有,可以先用这个测试 官方测试链接文档地址 在项目中的配置文件勾选 组件中使用 如果要实时可以去做全局ws //消息推送模版uni.createPushMessage(…

人工智能进程;算子加速的具体计算部分;大模型GPT5:参数18万亿;大模型面临问题

目录 人工智能进程 算子加速的简单理解,举例说明 一、简单理解 二、举例说明 一、算子加速的具体计算部分 二、举例说明 三、算子加速是否仅针对GPU 大模型GPT5:参数18万亿 大模型面临问题 算力集群设计框架 人工智能进程

算法-二叉树的最大路径和

为了找到二叉树的最大路径和&#xff0c;我们需要考虑所有可能的路径&#xff0c;包括不经过根节点的路径&#xff0c;所以其实如果你从整体上来一条路径一条路径的遍历&#xff0c;太复杂&#xff0c;我们可以换个思路&#xff0c;从每个节点出发&#xff0c;就把那个节点当成…

C++ | Leetcode C++题解之第504题七进制数

题目&#xff1a; 题解&#xff1a; class Solution { public:string convertToBase7(int num) {if (num 0) {return "0";}bool negative num < 0;num abs(num);string digits;while (num > 0) {digits.push_back(num % 7 0);num / 7;}if (negative) {dig…

深入剖析Canvas的getBoundingClientRect:精准定位与交互事件实现

软考鸭微信小程序 过软考,来软考鸭! 提供软考免费软考讲解视频、题库、软考试题、软考模考、软考查分、软考咨询等服务 在前端开发中&#xff0c;Canvas是一个强大的绘图工具&#xff0c;它允许开发者在网页上动态地绘制图形、图像和动画。然而&#xff0c;仅仅能够绘制图形是不…

Github优质项目推荐(第八期)

文章目录 Github优质项目推荐 - 第八期一、【manim】&#xff0c;66.5k stars - 创建数学动画的 Python 框架二、【siyuan】&#xff0c;19.5k stars - 个人知识管理软件三、 【GetQzonehistory】&#xff0c;1.3k stars - 获取QQ空间发布的历史说说四、【SecLists】&#xff0…

字节流读写复制视频 JAVA

四种方式实现复制视频&#xff0c;并记录每种复制方式的耗时 import java.io.*;//四种方式实现复制视频&#xff0c;并记录每种复制方式的耗时 /*1、基本字节流一次读写一个字节 共耗时:10809毫秒2、基本字节流一次读写一个字节数组 共耗时:14毫秒3、字节缓冲流…

Docker Redis集群3主3从模式

主从集群 docker run -d --name redis-node1 --net host --privilegedtrue -v /home/redis/node1:/data redis:7.0 --cluster-enabled yes --appendonly yes --port 9371docker run -d --name redis-node2 --net host --privilegedtrue -v /home/redis/node2:/data redis:7.0 …