什么是es

什么是ES?
ES是Elasticsearch的简称,Elasticsearch是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎。Lucene只是一个框架,要充分利用它的功能,需要使用JAVA,并且在程序中集成Lucene,学习成本高,且Lucene确实非常复杂。

特点:

分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索
       实时分析的分布式搜索引擎
       可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据

接近实时(NRT)
Elasticsearch 是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1 秒)

全文检索

全文检索就是对一篇文章进行索引,可以根据关键字搜索,类似于mysql里的like语句。

全文索引就是把内容根据词的意义进行分词,然后分别创建索引,例如”你们的激情是因为什么事情来的” 可能会被分词成:“你们“,”激情“,“什么事情“,”来“ 等token,这样当你搜索“你们” 或者 “激情” 都会把这句搜出来。

es的核心概念

1、集群cluster

ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。

2、节点node

一个节点是你集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引和搜索功能。和集群类似,一个节点也是由一个名字来标识的,默认情况下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点。这个名字对于管理工作来说挺重要的,因为在这个管理过程中,你会去确定网络中的哪些服务器对应于Elasticsearch 集群中的哪些节点。
 一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫做“elasticsearch”的集群中,这意味着,如果你在你的网络中启动了若干个节点,并假定它们能够相互发现彼此,它们将会自动地形成并加入到一个叫做“elasticsearch”的集群中。在一个集群里,只要你想,可以拥有任意多个节点。而且,如果当前你的网络中没有运行任何Elasticsearch 节点, 这时启动一个节点, 会默认创建并加入一个叫做“elasticsearch”的集群。

节点是Elasticsearch运行中的实例,而 集群 则包含一个或多个具有相同 cluster.name 的节点,它们协同工作,共享数据,并共同分担工作负荷。由于节点是从属集群的,集群会自我重组来均匀地分发数据。集群中的一个节点会被选为master节点,它将负责管理集群范畴的变更,例如创建或删除索引,添加节点到集群或从集群删除节点。master节点无需参与文档层面的变更和搜索,这意味着仅有一个master节点并不会因流量增长而成为瓶颈。任意一个节点都可以成为master节点。我们例举的集群只有一个节点,因此它会扮演master节点的角色。

作为用户,我们可以访问包括master节点在内的集群中的任一节点。每个节点都知道各个文档的位置,并能够将我们的请求直接转发到拥有我们想要的数据的节点。无论我们访问的是哪个节点,它都会控制从拥有数据的节点收集响应的过程,并返回给客户端最终的结果。这一切都是由Elasticsearch透明管理的。

node.master: true  //是否候选主节点

数据节点负责数据的存储和相关的操作,例如对数据进行增、删、改、查和聚合等操作,所以数据节点(Data 节点)对机器配置要求比较高,对 CPU、内存和 I/O 的消耗很大。

通常随着集群的扩大,需要增加更多的数据节点来提高性能和可用性。

候选主节点可以被选举为主节点(Master 节点),集群中只有候选主节点才有选举权和被选举权,其他节点不参与选举的工作。

主节点负责创建索引、删除索引、跟踪哪些节点是群集的一部分,并决定哪些分片分配给相关的节点、追踪集群中节点的状态等,以及何时在节点之间移动分片以重新平衡集群,稳定的主节点对集群的健康是非常重要的

3、分片shard

一个Shard就是一个Lucene实例,是一个完整的搜索引擎。

一个索引可以只包含一个Shard,当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。只是一般情况下会用多个分片,可以拆分索引到不同的节点上,每个分片放到不同的服务器上。当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。

4、副本replica

为提高查询吞吐量或实现高可用性,可以使用分片副本。
副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。
当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片

6、索引index

ES将数据存储于一个或多个索引中。类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据表(旧版本相当于一个库,新版本相当于一张表)。索引由其名称(必须为全小写字符)进行标识。一个ES集群中可以按需创建任意数目的索引。

一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,如果你想,可以定义任意多的索引。

在Elasticsearch中,我们的数据都在分片中被存储以及索引,索引只是一个逻辑命名空间,它可以将一个或多个分片组合在一起。然而,这只是一个内部的运作原理,我们的程序可以根本不用关心分片。对于我们的程序来说,我们的文档存储在索引中。剩下的交给Elasticsearch就可以了。

索引名称必须要全部小写,也不能以下划线开头,不能包含逗号。

7、文档document

索引和搜索的主要数据载体,对应写入到ES中的一个doc,相当于传统关系型数据库领域中的一条数据。

一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON(JavascriptObject Notation)格式来表示,而JSON 是一个到处存在的互联网数据交互格式。在一个index/type 里面,只要你想,你可以存储任意多的文档。注意,尽管一个文档,物理上存在于一个索引之中,文档必须被索引/赋予一个索引的type。

与关系型数据库不同,ES的文档不需要有固定的结构,不同文档可以具有不同的字段集合,而且在程序开发时不需要知道文档的字段。当然用户可以通过模式映射(schema mapping)定义文档结构。

在Elasticsearch中,文档这个单词有特殊的含义。它指的是在Elasticsearch中被存储到唯一ID下的由最高级或者根对象 (rootobject )序列化而来的JSON。

一个文档不只包含了数据。它还包含了元数据(metadata) —— 关于文档的信息。有三个元数据元素是必须存在的,它们是:

id是一个字符串,当它与 _index 以及 _type 组合时,就可以来代表Elasticsearch中一个特定的文档。

8、字段field

document中的各个字段。

9、词项term

举例说明:

  • Java is the best programming language.
  • PHP is the best programming language.
  • Javascript is the best programming language.

为了创建倒排索引,我们通过分词器将每个文档的内容域拆分成单独的词,我们称之为词条或term,创建一个包含所有不重复词条的排序列表,然后列出每个词条出现在哪个文档:

Term          Doc_1    Doc_2   Doc_3
-------------------------------------
Java        |   X   |        |
is          |   X   |   X    |   X
the         |   X   |   X    |   X
best        |   X   |   X    |   X
programming |   x   |   X    |   X
language    |   X   |   X    |   X
PHP         |       |   X    |
Javascript  |       |        |   X

这种结构由文档中所有不重复词的列表构成,对于其中每个词都有一个文档列表与之关联。这种由属性值来确定记录的位置的结构就是倒排索引。带有倒排索引的文件我们称之为倒排文件。我们将上面的内容转换为图的形式来说明倒排索引的结构信息,如下图所示:

其中上图的几个概念需要说明一下:

词条(Term):索引里最小的存储和查询单元,对于英文来说是一个单词,对于中文来说是分词后的一个词。

词典(Term Dictionary):或者词典,是词条term的集合。搜索引擎的通常索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向“倒排列表”的指针。

倒排表(Post list):一个文档通常由多个词组成,倒排表记录的是某个词在哪些文档里出现过以及出现的位置。

每条记录称为一个倒排项(Posting)。倒排表记录的不单是文档编号,还存储了词频等信息。

倒排文件(Inverted File):所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件被称之为倒排文件,倒排文件是存储倒排索引的物理文件。

从上图也可以看出:倒排索引主要由两部分组成:词典和倒排文件。词典和倒排表是 Lucene 中很重要的两种数据结构,是实现快速检索的重要基石。词典和倒排文件是分两部分存储的,词典在内存中而倒排文件存储在磁盘上。

10、词条token

词项(term)在字段(field)中的一次出现,包括词项的文本、开始和结束的位移、类型等信息。Lucene内部使用的是倒排索引的数据结构,将词项(term)映射到文档(document)。

分片和复制

一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10 亿文档的索引占据1TB 的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点的计算能力达不到期望的复杂功能的要求。这种情况下,可以将数据切分,每部分是一个单独的apache lucene索引,称为分片。每个分片可以被存储在集群的不同节点上。

为了解决这个问题,Elasticsearch 提供了将索引划分成多份的能力,这些份就叫做分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。

分片之所以重要,主要有两方面的原因:
     - 允许你水平分割/扩展你的内容容量
      - 允许你在分片(潜在地,位于多个节点上)之上进行分布式的、并行的操作,进而提高性能/吞吐量

在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch 允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片,或者直接叫复制。

复制之所以重要,有两个主要原因:[高可用与高吞吐]
      - 在分片/节点失败的情况下,提供了高可用性。因为这个原因,注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的。
     - 扩展你的搜索量/吞吐量,因为搜索可以在所有的复制上并行运行

总之,每个索引可以被分成多个分片。一个索引也可以被复制0 次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你事后不能改变分片的数量。

默认情况下,Elasticsearch 中的每个索引被分片5 个主分片和1 个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有5 个主分片和另外5 个复制分片(1 个完全拷贝),这样的话每个索引总共就有10 个分片。

River

代表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的。

Gateway

代表es索引的持久化存储方式,es默认是先把索引存放到内存中,当内存满了时再持久化到硬盘。当这个es集群关闭再重新启动时就会从gateway中读取索引数据。es支持多种类型的gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS和amazon的s3云存储服务。

discovery.zen

代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。

ransport

代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议(9300端口)进行交互,同时它支持http协议(json格式)(9200端口)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)。

想系统学习一下es,搞个es的专栏笔记。复制粘贴自这位大佬的博客:https://blog.csdn.net/xifeijian/article/details/49586949

Elastic核心概念相关推荐

  1. 2021年大数据ELK(五):Elasticsearch中的核心概念

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 Elasticsearch中的核心概念 一.索引 index 二 ...

  2. ElasticSearch系列——Kibana,核心概念

    ElasticSearch系列--Kibana,核心概念 Kibana 下载地址 Windows安装 修改配置文件 启动Kibana 验证 ES核心概念 Index索引 Mapping映射 Docum ...

  3. ES应用场景及核心概念一

    目录 ES基本安装及应用 安装 ​ 使用方式 这里在java中实现,首先引入客户端包 index alias的应用 同步DB数据到ES ES核心概念 type类型弱化. ES核心操作 ES基本安装及应 ...

  4. Elasticsearch(一)——Es安装(三个必安工具、安装各种类型分词器)、Es 十大核心概念、通过 Kibana 操作 Es(中文分词、Es各种索引命令操作)

    Elasticsearch(一)--Es安装(三个必安工具.安装各种类型分词器).Es 十大核心概念.通过 Kibana 操作 Es(中文分词.Es各种索引命令操作) 一.Elasticsearch ...

  5. 15分钟掌握Elasticsearch 8大核心概念与基础用法

    Elastic已经形成了一个较为庞大的生态,这个生态的核心就是Elasticsearch.初学者的重点就是如何快速地了解并使用Elasticsearch,本文总结了Elasticsearch的8大核心 ...

  6. Sg.js框架核心概念

    Sg.js框架核心概念: 1)所有变量.方法.类对象全部都是从属于$g主树,由$g分支出很多$g.变量名.$g.方法.$g.对象id.$g.类: 2)获取控件内部属性必须使用公开的get方法获取,禁止 ...

  7. 学习 JavaScript (四)核心概念:操作符

    JavaScript 的核心概念主要由语法.变量.数据类型.操作符.语句.函数组成,前面三个上一篇文章已经讲解完了.后面三个内容超级多,这篇文章主要讲解的是操作符. 操作符 什么叫做操作符? 这是一种 ...

  8. Go modules基础精进,六大核心概念全解析(下)

    Go 语言做开发时,路径是如何定义的?Go Mudules又为此带来了哪些改变?本文将会全面介绍Go Modules六大核心概念,包括了设计理念与兼容性原则等,掌握这些技术点对于管理和维护Go 模块有 ...

  9. Go modules基础精进,六大核心概念全解析(上)

    Go 语言做开发时,路径是如何定义的?Go Mudules又为此带来了哪些改变?本文将会全面介绍Go Modules六大核心概念,包括了设计理念与兼容性原则等,掌握这些技术点对于管理和维护Go 模块有 ...

最新文章

  1. android 增加一条广播,Android中BroadcastReceiver广播使用及注意点
  2. 1.Hello,World all the time
  3. Confluence 6 找到在创建 XML 备份的时候出现的错误
  4. 【poj2187】 Beauty Contest
  5. 这些道理不懂,你注定就是穷打工的命!(转载)
  6. 手机html left 50%,left-​50%是什么意思
  7. 2021.NET Conf China上的GraphQL
  8. 【渝粤教育】电大中专市场营销管理 (2)作业 题库
  9. carbondata与mysql_Apache CarbonData 1.4.0 中文文档
  10. Node.js~在linux上的部署~pm2管理工具的使用
  11. 未来教育考试系统V4.0——安装后双击打不开
  12. Air720H模块MQTT协议的AT指令流程
  13. Error: The method ‘DioHttpHeaders.add‘ has fewer named arguments than those of overridden method
  14. YDOOK:ANSYS 进行电磁场仿真的第三步:施加边界条件和载荷
  15. 【CTA系列】Kelly公式在最优f问题上的应用
  16. JavaScript高级程序设计[美]Nicholas C.Zakas著 读书笔记(一)
  17. model.evaluate中的verbose的作用
  18. 计算机数值怎么看大小,笔记本电脑尺寸怎么看_笔记本电脑尺寸查询
  19. 任正非讲话稿400篇_2021国家公务员考试笔试考情分析【申论篇】
  20. java的数据异常_java的各种异常

热门文章

  1. 转转二手为用户提供高效率交易平台
  2. 权限控制之粗粒度与细粒度
  3. 小程序如何集成即构IM实现即时通讯发消息聊天
  4. 这个开源项目真赞,介绍一个大功率伺服驱动器
  5. 首次编译络达sdk时出现的问题
  6. 中国中学计算机教学大纲,G003467 九年义务教育全日制初级中学数学教学大纲(试用)...
  7. 女性收入最高的20个工作一览
  8. HCIE学习记录——数通网络基础
  9. 项目管理中,如何减少项目风险?
  10. 铁锈战争虚拟服务器,铁锈战争王者之战(两周年庆)