小白学ES 01-Elasticsearch的基础概念

目录

  • 1 Elasticsearch概述

    • 1.1 Elasticsearch是什么
    • 1.2 Elasticsearch的优点
    • 1.3 Elasticsearch的相关产品
    • 1.4 Elasticsearch的使用场景
  • 2 Elasticsearch的功能概述
    • 2.1 分布式的搜索引擎和数据分析引擎
    • 2.2 全文检索 结构化检索 数据分析
    • 2.3 海量数据的近实时处理
  • 3 Elasticsearch的核心概念
    • 3.1 ES服务的相关概念
    • 3.2 ES索引的相关概念
    • 3.3 与关系型数据库的对比
  • 参考资料:

1 Elasticsearch概述

1.1 Elasticsearch是什么

Elasticsearch(ES)是一个基于Apache的开源索引库Lucene而构建的开源、分布式、RESTful接口的全文搜索引擎, 还是一个分布式文档数据库.

ES可以轻松扩展数以百计的服务器(水平扩展), 用于存储和处理数据. 它可以在很短的时间内存储、搜索和分析海量数据, 通常被作为复杂搜索场景下的核心引擎.

由于Lucene提供的API操作起来异常繁琐, 需要编写大量的代码, Elasticsearch就对Lucene 进行了封装与优化, 并提供了REST风格的操作接口, 开箱即用, 大大的方便了开发人员的使用.

关于全文检索与Lucene方面的简介, 请参照博主的博客: Lucene01-全文搜索及Lucene简介

1.2 Elasticsearch的优点

  1. 横向可扩展性: 作为大型分布式集群, 很容易就能扩展新的服务器到ES集群中; 也可运行在单机上作为轻量级搜索引擎使用.
  2. 更丰富的功能: 与传统关系型数据库相比, ES提供了全文检索、同义词处理、相关度排名、复杂数据分析、海量数据的近实时处理等功能.
  3. 分片机制提供更好地分布性: 同一个索引被分为多个分片(Shard), 利用分而治之的思想提升处理效率.
  4. 高可用: 提供副本(Replica)机制, 一个分片可以设置多个副本, 即使在某些服务器宕机后, 集群仍能正常工作.
  5. 开箱即用: 提供简单易用的API, 服务的搭建、部署和使用都很容易操作.

1.3 Elasticsearch的相关产品

  1. Beats: 是一个代理, 将不同类型的数据发送到Elasticsearch中.
  2. Shield: 提供基于角色的访问控制与审计, 加密通信、认证保护整个ES的数据, 为ES带来企业级的安全性. 是收费产品.
  3. Watcher: 是ES的警报和通知工具, 检测ES的状态, 在异常发生时进行提醒. 是收费产品
  4. Marvel: 是ES的管理和监控工具, 检测ES集群的索引和节点的活动. 是收费产品.

1.4 Elasticsearch的使用场景

(1) 维基百科(类似百度百科): 全文检索, 高亮, 搜索推荐;

(2) The Guardian(新闻网站): 用户行为日志(点击, 浏览, 收藏, 评论) + 社交网络数据(对某某新闻的相关看法), 数据分析(将公众对文章的反馈提交至文章作者);

(3) Stack Overflow(IT技术论坛): 全文检索, 搜索相关问题和答案;

(4) GitHub(开源代码管理), 搜索管理其托管的上千亿行代码;

(5) 日志数据分析: ELK技术栈(Elasticsearch + Logstash + Kibana)对日志数据进行采集&分析;

(6) 商品价格监控网站: 用户设定某商品的价格阈值, 当价格低于该阈值时, 向用户推送降价消息;

(7) BI系统(Business Intelligence, 商业智能): 分析某区域最近3年的用户消费额的趋势、用户群体的组成结构等;

(8) 其他应用: 电商、招聘、门户等网站的内部搜索服务, IT系统(OA, CRM, ERP等)的内部搜索服务, 数据分析(ES的又一热门使用场景).

2 Elasticsearch的功能概述

2.1 分布式的搜索引擎和数据分析引擎

  1. 搜索: 谷歌, 百度, 各大网站的站内搜索(如淘宝网的商品搜索), IT系统的检索(如OA内部的信息查询);
  2. 数据分析: 电商网站中, 对形如最近30天IT书籍销量排名前10的商家有哪些; 新闻网站中: 最近7天访问量排名Top 10的新闻是哪些......
  • 总结: Elasticsearch用于: 在较大用户量、较高访问量的分布式系统中, 对数据进行搜索与分析.

2.2 全文检索 结构化检索 数据分析

  1. 全文检索: 搜索商品名称包含"编程思想"的商品: select * from products where product_name like "%编程思想%" ;
  2. 结构化检索: 搜索商品分类为"计算机科学"的所有商品: select * from products where category_id=‘计算机科学‘ ;
  3. 数据分析: 分析每一种商品分类下有多少件商品: select category_id, count(*) from products group by category_id ;
  4. 其他个性化搜索需求: 部分匹配、自动完成(输入联想)、搜索纠错、搜索推荐......

2.3 海量数据的近实时处理

  1. 分布式: Elasticsearch可将海量数据自动分发到多台服务器上, 进行存储和检索;
  2. 海量数据的处理: 分布式系统构建完成后, 就可通过大规模服务器集群去存储和检索数据 —— 服务器有了处理海量数据的能力;
  3. 基于Elasticsearch的搜索和分析服务可达到秒级响应.
  • 关于近实时:

    非近实时: 检索x个数据要花费很长时间(这就不是近实时, 而是离线批处理, batch-processing).

    实时: 数据的处理与响应都是立即呈现的, 几乎没有间隔, 这在大数据应用场景下是很难达到的要求.

    近实时(near real-time, NRT): 对海量数据进行搜索和分析的响应耗时控制在秒级以内, 方可称为近实时.

3 Elasticsearch的核心概念

3.1 ES服务的相关概念

  1. Term(索引词)

    • 在ES中, 索引词(Term)是一个能够被索引的精确值, 可以通过Term查询进行准确搜索.
    • 举例: foo、Foo、FOO是不同的索引词.
  2. Text(文本)
    • 文本是一段普通的非结构化文字, 通长文本会被分析成多个Term, 存储在ES的索引库中.
    • 文本字段一般需要先分析再存储, 查询文本中的关键词时, 需要根据搜索条件搜索出原文本.
  3. Analysis(分析)
    • 分析是将文本转换为索引词的过程, 分析的结果依赖于分词器.
    • 比如: FOO BAR、Foo-Bar和foo bar可能会被分析成相同的索引词foo和bar, 然后被存储到ES的索引库中. 当用FoO:bAr进行全文搜索的时候, 搜索引擎根据匹配计算也能在索引库中查找到相关的内容.
  4. Cluster(集群)
    • 集群由一个或多个节点组成, 对外提供索引和搜索服务. 集群中有且只能有一个节点被选举为主节点 —— 主从节点是集群内部的说法, 对用户是透明的 —— 去中心化.
    • 同一网络中, 每个ES集群都要有唯一的名称用于区分, 默认的集群名称为"Elasticsearch".
    • 水平扩展时, 只需要将新增节点的集群名称设置为要扩容的集群名称, 该节点就会自动加入集群中.
    • 一个节点只能加入到一个集群中.
  5. Node(节点)
    • 节点是逻辑上独立的服务, 是集群的一部分, 可以存储数据, 并参与集群的索引和检索功能.
    • 节点也有唯一的名称, 用于集群的管理和通信. 节点名称在启动的时候自动分配 —— 当然可以自定义.
    • 如果有多个节点在运行, 默认情况下, 这些节点会自动组成一个名为Elasticsearch的集群.
    • 如果只有一个节点在运行, 该节点就会组成只有一个节点的名为Elasticsearch的集群.
    • 每个节点属于哪个集群是通过"集群名称"来决定的.
  6. Shard(分片)
    • 单台机器(节点)无法存储大量的索引数据, ES可以把一个完整的索引分成多个分片, 分布到不同的节点上, 从而构成分布式索引.
    • 分片的数量只能在创建索引前指定, 创建索引后不能修改.
    • 每个分片都是一个Lucene实例, 即每个分片底层都有一个单独的Lucene提供索引和检索服务, 它们可以托管在集群的任一节点上.
    • 单个Lucene中存储的索引文档最大值为 lucene-5843, 极限是2147483519(=integer.max_value - 128) 个文档. 可使用_cat/shards API 监控分片的大小.
  7. Replica(副本)
    • ES支持为每个Shard创建多个副本, 相当于索引数据的冗余备份.
    • 副本的重要性:
      • ① 解决单点问题, 提高可用性和容错性: 某些节点失败时服务不受影响;
      • ② 提高查询效率: 搜索可以在所有的副本上并行执行, 提高了服务的并发量.
  8. Primary Shard & Replica Shard(主分片和副本分片)
    • 分片分为Primary Shard(主分片)、Replica Shard(副本分片), 建立索引时, 系统会先将索引存储在主分片中, 然后再将主分片中的索引复制到不同的副本中.
    • 注意: 主分片和副本分片不能存储在同一个节点中 —— 无法保证高可用. 主分片在建立索引时设置, 默认为5个, 后期不能修改; 系统默认每个主分片各有一个副本分片, 即共有5个副本分片, 可随时修改其数量.
    • ==> 默认情况下, 每个索引共有10个Shard = 5个Primary Shard + 5个Replica Shard.
    • ==> 集群中至少要有2个节点: 最小的高可用配置.

3.2 ES索引的相关概念

ES的索引中, 各概念的关系为: Field =组成=> Document =组成=> Type =组成=> Index, 索引结构图如下:

  1. Index(索引)

    • 索引是具有相似结构的文档的集合, 比如可以有一个商品分类索引, 订单索引.
    • 索引的名称要小写, 通过索引名称来执行索引、搜索、更新和删除等操作.
  2. Type(类型)
    • 每个索引中可以定义一个或多个Type, Type是Index的逻辑分类.
    • 一种Type一般被定义为具有一组公共field的document, 比如对博客系统中的数据建立索引, 可以定义用户数据Type, 博客数据Type, 评论数据Type.
  3. Document(文档)
    • 文档是存储在ES中的一个JSON格式的字符串, 是ES索引中的最小数据单元.
    • 一个Document可以是一条商品分类数据, 一条订单数据, 例如:
      # book document
      {
          "book_id": "1",
          "book_name": "Thinking in Java(Java 编程思想)",
          "book_desc": "Java学习者不得不看的经典书籍",
          "book_price": 108.00,
          "category_id": "5"
      }
  4. Mapping(映射)
    • 类似于关系数据库中的表结构, 每个Index都有一个映射: 定义索引中每个字段的类型.
    • 映射可以提前定义, 也可以在第一次存储文档时自动识别.
    • 类似于Solr中约束schema.xml文件的作用.
  5. Field(字段)
    • 字段可以是一个简单的值(如字符串、数字、日期), 也可以是一个数组, 还可以嵌套一个对象或多个对象.
    • 字段类似于关系数据库中表数据的列, 每个字段都对应一个类型.
    • 可以指定如何分析某一字段的值, 即对Field指定分词器.
  6. Source Field(源字段)
    • 原始的JSON文档被存储在 _source 字段中, 搜索文档时默认返回该字段及其内容.
    • 该字段不存储索引分析后的任何其他数据.
  7. ID(主键)
    • ID是一个Document的唯一标识, 如果存储文档时没有提供ID, ES会自动生成一个ID.
    • Document的Index/Type/ID都必须是唯一的.

3.3 与关系型数据库的对比

Elasticsearch RDBMS
Index(索引) DataBase(数据库)
Type(类型) Table(表)
Document(文档) Row(行)
Field(字段) Column(列)

参考资料:

《Elasticsearch技术解析与实战》朱林 编著, 机械工业出版社出版

版权声明

作者: ma_shoufeng(马瘦风)

出处: 博客园 马瘦风的博客

您的支持是对博主的极大鼓励, 感谢您的阅读.

本文版权归博主所有, 欢迎转载, 但未经博主同意必须保留此段声明, 且在文章页面明显位置给出原文链接, 否则博主保留追究法律责任的权利.

原文地址:https://www.cnblogs.com/shoufeng/p/9887327.html

时间: 2024-10-12 19:54:50

小白学ES 01-Elasticsearch的基础概念的相关文章

.NET那点事 (01).NET基础概念

.NET基础概念 1 什么是CTS.CLS和CLR2 开发和运行.NET程序需要的最基本环节是什么3 .NET是否支持多编程语言开发4 CLR技术和COM技术的比较5 什么是程序集和应用程序域 1 什么是CTS.CLS和CLR 缩写的全称:     CTS是通用类型系统(Common Type System) CLS是公共语言规范(Common Language Specification) CLR是公共语言运行时(Common Language Runtime) 所有类型都可以在 CTS中声明

小白学ES 06 - 通过Kibana学习ES的基础语法

目录 1 document结构 2 document的常见CRUD操作 2.1 添加商品: 添加文档并建立索引 2.2 查询商品: 检索文档 2.3 修改商品: 替换文档 2.4 修改商品: 更新文档 2.5 删除商品: 删除文档 1 document结构 ES是一款面向文档的数据搜索.分析引擎. document结构说明: (1) 基于面向对象的开发思想, 应用系统中的数据结构都是很复杂的: 对象中嵌套对象, 如CRM系统中的客户对象中, 还会嵌入客户相关的企业对象. (2) 对象数据存储到数

Elasticsearch框架基础概念

Elasticsearch(ES)是一个基于Lucene构建开源分布式搜索引擎并提供Restful接口. Es是一个分布式文档数据库(JSON数据格式存储,类似MongoDB),JSON中的每个字段数据都可作为搜索条件,并且能够扩展至数以百计的服务器存储以及处理PB(PetaByte)级的数据.可在短时间内存储.搜索和分析大量的数据. PB级级别: 拍字节(Petabytes),计算机存储容量单位,也常用PB来表示.1PB=1024TB==2^50字节. Es优势: 横向可扩展性: 只需增加服务

ES.01.Elasticsearch安装配置

Windows版 提纲: 1.   安装Elasticsearch 1.1. 下载Elasticsearch: https://www.elastic.co/cn/downloads/elasticsearch,添加系统变量. 1.2.  运行es,切换到bin目录,运行elasticsearch.bat. 1.3   访问服务http://localhost:9200. Ps:es默认端口号为9200. 2.   安装可视化插件(非必要,看个人需要) 2.1. 下载head (elastics

没事抽空学——c语言指针操作基础概念

指针基础 理解指针的最佳方法是画图,学习使用基本指针,不要产生空指针. 存储控件分配 存储控件分配是指在内存预留空间的过程.就像一个虚拟菜谱一样,指针对应菜名,其所指的内存空间中的数据对应实际的菜. 数据集合与指针的算术运算 数据集合主要指结构和数组.指针的算术运算定义指针的计算规则.指向结构的指针对于建立数据结构起着至关重要的作用.在c中,数组和指针一样,都是以指针算术运算方法进行运算的. 作为函数参数的指针 通过这种方式,可以按照传递应用的方法传递函数参数.在c语言中,传递数组或大型结构时,

[触动精灵] 零基础小白学触动1-4

视频地址 http://www.iqiyi.com/playlist443635102.html 零基础小白学触动 - 01 - 说在前面的废话 小知识:Tslib库的定位 是官方为了解决小白不会封装自己的函数 提供了一些常见的封装功能 熟练后 我们可以自己封装自己的函数实现功能 可以不用载入这个库文件 小知识:手册非常强大 手册的搜索功能 和目录列表 ? 零基础小白学触动 - 02 - 注释和循环语句 没什么可说的 注释语句: -- --[[]]-- 流程语句 If 条件1 then Else

Elasticsearch技术解析与实战(一)基础概念及环境搭建

基础概念 Elasticsearch是一个近实时的系统,从你写入数据到数据可以被检索到,一般会有1秒钟的延时.Elasticsearch是基于Lucene的,Lucene的读写是两个分开的句柄,往写句柄写入的数据刷新之后,读句柄重新打开,这才能读到新写入的数据. 名词解释: Cluster:集群. Index:索引,Index相当于关系型数据库的DataBase. Type:类型,这是索引下的逻辑划分,一般把有共性的文档放到一个类型里面,相当于关系型数据库的table. Document:文档,

小白学 Python(2):基础数据类型(上)

人生苦短,我选Python 引言 前文传送门 小白学 Python(1):开篇 接触一门新的语言,肯定要先了解它的基础数据类型.啥?你问我为啥要先了解基础数据类型? 为了你的生命安全,还是乖乖听我 BB 吧,别想那些有的没的. Python 拥有着很多的基础数据类型,那么,什么是数据类型呢? 打开百度,随手一个 Copy: 数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作. 变量是用来存储值的所在处,它们有名字和数据类型.变量的数据类型决定了如何将代表这些值的位存储到计算机

小白学 Python(6):基础运算符(下)

人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变量基础操作 小白学 Python(5):基础运算符(上) 前言 上一篇文章我们介绍了算术运算符和比较运算符.本篇我们继续介绍其余的几个: 赋值运算符 逻辑运算符 成员运算符 身份运算符 赋值运算符 Python 中,使用 = 号表示赋值.当然,Python 还提供了其他赋值方式,直接帮我们简化了写法