首页 > 其他分享 >ElasticSearch 入门需要了解的概念

ElasticSearch 入门需要了解的概念

时间:2024-10-26 22:19:46浏览次数:5  
标签:入门 field GET 概念 books 文档 ElasticSearch type

引言: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 的基础。随着实践的深入,你会逐渐理解这些概念之间的关联和应用。

标签:入门,field,GET,概念,books,文档,ElasticSearch,type
From: https://blog.csdn.net/tech_craftsman/article/details/143260714

相关文章

  • RabbitMQ 入门(三)SpringAMQP消息转换器
    一、消息转换器Spring会把你发送的消息序列化为字节发送给MQ,接收消息的时候,还会把字节反序列化为Java对象。只不过,默认情况下Spring采用的序列化方式是JDK序列化。众所周知,JDK序列化存在下列问题:-数据体积过大-有安全漏洞-可读性差JDK序列化方......
  • MybatisPlus入门(二)MybatisPlus入门案例
    一、SpringBoot整合MyBatisPlusSpringBoot整合MyBatisPlus入门案例:步骤一:创建新模块,选择Spring初始化,并配置模块相关基础信息。选择当前模块需要使用的技术集(仅保留JDBC)手动添加MyBatisPlus起步依赖:<dependency><groupId>com.baomidou</groupId><artifactId>myb......
  • MybatisPlus入门(一)MybatisPlus简介
    一、MyBatis简介MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率-官网:https://mybatis.plus/  https://mp.baomidou.com/MyBatisPlus特性:-无侵入:只做增强不做改变,不会对现有工程产生影响-强大的CRUD操作:内置通用Mapper,少......
  • 第12题——入门级js
    题目网址:https://match.yuanrenxue.cn/match/12解题步骤看流量包和其回显数据。只有一个流量包,那就是只要访问该网址就能获取页面数据。看下请求地址的组成。变量m一看就是base64编码,解码看下原字符串。再尝试访问第二页,看看原字符串组成的规律。比较明了了,原字符串......
  • 【2024版】PyCharm专业版下载+安装+汉化教程,Pycharm环境配置和使用指南,零基础小白Pyth
    前言PyCharm是一款由JetBrains公司推出的PythonIDE。它提供了一个简单易用的图形用户界面,并且具有很多有用的功能,如代码补全和自动代码检查,帮助开发人员更加高效地编写Python代码。此外,PyCharm还提供了调试器和版本控制系统集成,使得开发人员能够更加轻松地管理和维护他们的......
  • 一篇最全Python 爬虫超详细讲解(零基础入门,适合小白)
    爬虫是指通过编程自动从网页上获取信息的技术.想象你平时打开网页,右键点击“查看源代码”,那些你看到的HTML代码就是网页的结构,而爬虫就像一位帮你阅读这些网页内容的“机器人”.创作不易,还请各位同学三连点赞!!收藏!!转发!!!刚入门学习Python的小伙伴可以试试我的这份学习方法......
  • Linux Centos安装ElasticSearch、分词器、es-head和Kibana
    1前言Java中比较流行的搜索引擎是Elasticsearch,传统的数据库搜索,使用like’关键字%’,当内容过多时性能会大大降低,所以Elasticsearch就出现了。下面,记录下Linux下Elasticsearch的安装过程。2Linux下安装Elasticsearch2.1下载和解压安装包官网下载地址:https://www.elastic.......
  • 渗透测试是干什么?渗透测试零基础入门到精通,收藏这篇就够了
    您的组织是否有能力防御日益增多的网络攻击?渗透测试是评估组织IT和安全基础设施的最佳方法之一,因为它可以识别网络和系统中的漏洞。未修补的漏洞是对网络犯罪分子的公开邀请。美国国家标准与技术研究院(NIST)2021年发现了4,068个高风险漏洞。最近网络攻击的激增刺......
  • 实用 | 满满的干货,网络安全知识学起来(非常详细)零基础入门到精通,收藏这一篇就够了
    随着“互联网+”时代的到来,人们的生活变得更加便利,与此同时,生活中各种诈骗短信、垃圾邮件、钓鱼网站也随之而来,导致我们个人信息泄露,甚至财产损失。网络是把双刃剑,如何安全使用成了关键。那么网络安全知识,你知道多少呢?网络安全常见问题隐患01网络病毒攻击02网络黑客入......
  • 如何成为一名网络安全工程师?(非常详细)零基础入门到精通,收藏这一篇就够了
    在5G互联网高度发达的今天,网络安全被提升到国家战略,信息网络安全问题引发了社会各界的广泛关注,越来越多的网络安全类人才受到各大公司的青睐。如果你的逻辑分析能力足够强,同时还有IT领域工作经验,并且对网络安全工程师这个职业感兴趣的话,不妨现在就开始规划一下你的职业发展......