ES-基础概念和原理(一)

ES其实就是基于lucene之上封装的一个分布式 索引框架,所以lucene拥有的特性,它都是有的,同时因为它使基于分布式的,所以对很多的功能进行了扩展,要想掌握ES,需要先熟悉一下Lucene,因为熟悉了Lucene之后,不论是学ES,还是Solr都是比较容易的.在这里插一句经常有人在选型的时候,不知道用ES还是Solr,建议可以参考下面的方案:如果系统是从头接入搜索引擎,那么就不要犹豫了,直接使用ES,因为它上手快,使用也比较简单,如果是现有系统已经有搜索引擎框架,这个时候就需要思考一下,当下框架是否可以满足业务不断的发展需求?以及如果要替换对应升级所需要面对的风险是否可控?以及对应的解决方案.好了进入正题,解析来进入ES的入门.

一:ES是什么

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

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

二:ES优点是什么

(1) 横向可扩展性: 作为大型分布式集群, 很容易就能扩展新的服务器到ES集群中; 也可运行在单机上作为轻量级搜索引擎使用.

(2) 更丰富的功能: 与传统关系型数据库相比, ES提供了全文检索、同义词处理、相关度排名、复杂数据分析、海量数据的近实时处理等功能.

(3) 分片机制提供更好地分布性: 同一个索引被分为多个分片(Shard), 利用分而治之的思想提升处理效率.

(4) 高可用: 提供副本(Replica)机制, 一个分片可以设置多个副本, 即使在某些服务器宕机后, 集群仍能正常工作.

(5) 开箱即用: 提供简单易用的API, 服务的搭建、部署和使用都很容易操作.

三:ES基础概念

部分内容来源于其它博客.

1 term

在ES中, 索引词(term)是一个能够被索引的精确值, 可以通过term query进行准确搜索

2 text

文本是一段普通的非结构化文字, 通常文本会被分析成多个Term, 存储在ES的索引库中.
文本字段一般需要先分析再存储, 查询文本中的关键词时, 需要根据搜索条件搜索出原文本.

3 analysis

分析是将文本转换为索引词的过程, 分析的结果依赖于分词器

4 cluster

集群由一至多个节点组成, 对外提供索引和搜索服务. 一个节点只能加入到一个集群中.
集群中有且只能有一个节点会被选举为主节点 —— 主从节点是集群内部的说法, 对用户是透明的; ES做到了去中心化: 访问任一节点等价于访问整个集群.
同一网络中, 每个ES集群都要有唯一的名称用于区分, 默认的集群名称为"elasticsearch".
水平扩展时, 只需要将新增节点的集群名称设置为要扩容的集群名称, 该节点就会自动加入集群中.

5 node

节点是逻辑上独立的服务, 是集群的一部分, 可以存储数据, 并参与集群的索引和检索功能.
节点也有唯一的名称, 用于集群的管理和通信, 节点名称在节点启动时自动分配一个随机的UUID的前7个字符 —— 当然可以自定义.
如果有多个节点在运行, 默认情况下, 这些节点会自动组成一个名为Elasticsearch的集群.
如果只有一个节点在运行, 该节点就会组成只有一个节点的名为Elasticsearch的集群.
每个节点属于哪个集群是通过"集群名称"来决定的.

6 sharding

单台机器(节点)无法存储大量的索引数据, ES可以把一个完整的索引分成多个分片, 分布到不同的节点上, 从而构成分布式索引.

7 replica

ES支持为每个Shard创建多个副本, 相当于索引数据的冗余备份.
分片有Primary Shard(主分片)、Replica Shard(副本分片), 建立索引时, 系统会先将索引存储在主分片中, 然后再将主分片中的索引复制到不同的副本中.

8 rever

从其他存储方式 (如数据库) 中同步数据到ES的方法, 它是以插件方式存在的一个ES服务, 通过读取river中的数据并把它索引到ES中.
官方的river有CouchDB、RabbitMQ、Twitter、Wikipedia等.

9 index

索引是具有相似结构的文档的集合, 等同于Solr中的集合, 比如可以有一个商品分类索引, 订单索引.
每个索引都要有唯一的名称, 名称要小写, 通过索引名称来执行索引、搜索、更新和删除等操作.
一个集群中可以有任意多个索引, 只要保证名称不同即可.

10 type

type是index的逻辑分类, 在ES 6.x版本之前, 每个索引中可以定义一个或多个type, 而在6.X版本之后, 一个index中只能定义一个type.
一种type一般被定义为具有一组公共field的document, 比如对博客系统中的数据建立索引, 可以定义用户数据type, 博客数据type, 评论数据type, 也就是每个document都必须属于某一个具体的type, 也就是说每个document都有_type属性

11 mapping

类似于关系数据库中的Table结构, 每个index都有一个映射: 定义索引中每个字段的类型.
所有文档在写进索引之前都会先进行分析, 如何对文本进行分词、哪些词条又会被过滤, 这类行为叫做映射(mapping).
映射可以提前定义, 也可以在第一次存储文档时自动识别. 一般由用户自己定义规则.
类似于Solr中schema.xml约束文件的作用.

12 document

文档是存储在ES中的一个个JSON格式的字符串, 是ES索引中的最小数据单元, 由field(字段)构成

13 field

字段可以是一个简单的值(如字符串、数字、日期), 也可以是一个数组, 还可以嵌套一个对象或多个对象.
字段类似于关系数据库中表数据的列, 每个字段都对应一个类型.
可以指定如何分析某一字段的值, 即对field指定分词器.

14 gateway

ES索引的持久化存储方式

15 transport

内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互

16 discovery

ES节点自动发现机制,先通过广播寻找存在的节点,然后通过多播协议来进行数据通信,支持点对点的交互

四:集群角色

ES为了方便我们更好的使用,在对集群规划的时候,有明确的节点分工,下面简单说明一下

1 masternode

主节点,负责索引元数据的处理以及索引的增删改操作,以及索引分片分配.

2 datanode

数据节点主要是存储索引数据的节点,主要对文档进行增删改查操作,聚合操作等。数据节点对cpu,内存,io要求较高,
在优化的时候需要监控数据节点的状态,当资源不够的时候,需要在集群中添加新的节点。

3 clientnode

当主节点和数据节点配置都设置为false的时候,该节点只能处理路由请求,处理搜索,分发索引操作等,充当请求的负载平衡器。
 

4 turibenode

协调节点,可以实现夸集群进行通信

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值