Elasticsearch基本概念

本文主要是对ES基本概念进行整合,理论先行,夯实对ES的基本概念,在知道“是什么”,才能提高学习效率,保姆级学习教程请移步: ES入门笔记.

一、前文介绍

Elasticsearch(简称ES)是一个基于Apache Lucene™的开源搜索引擎,无论在开源还是专有领域,Lucene 可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。注意,Lucene 只是一个库。想要发挥其强大的作用,你需使用 Java 并要将其集成到你的应用中。

Lucene 非常复杂,你需要深入的了解检索相关知识来理解它是如何工作的,就跟学习 springmvc 之前先从 servlet 开始,繁琐复杂的工作,Solor、Elasticsearch 应由而生, 其使用 Java 编写并使用 Lucene 来建立索引并实现搜索功能,但是它的目的是通过简单连贯的 RESTful API 让全文搜索变得简单并隐藏 Lucene 的复杂性。

重要特性:

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

基本概念:

索引(indices)-------------------Databases 数据库
类型(type)----------------------Table 数据表
文档(Document)---------------Row 行
字段(Field)---------------------Columns 列

详细说明:

概念 说明
索引库(indices) indices是index的复数,代表许多的索引,
类型(type) 类型是模拟mysql中的table概念,一个索引库下可以有不同类型的索引,比如商品索引,订单索引,其数据格式不同。不过这会导致索引库混乱,因此未来版本中会移除这个概念
文档(document) 存入索引库原始的数据。比如每一条商品信息,就是一个文档
字段(field) 文档中的属性
映射配置(mappings) 字段的数据类型、属性、是否索引、是否存储等特性

二、经典倒排索引

案例:背诵诗词,静夜思,原本用诗名检索全文,现在没有索引的情况让你说去带“前”的诗句只能将大脑中所有诗词进行遍历;

Elasticsearch基本概念_第1张图片
Elasticsearch基本概念_第2张图片

所以可以取诗句中的字当作索引快速获取数据;当然反向索引的建立数据量激增,文章越长,索引越长

Elasticsearch基本概念_第3张图片

所以这个时候可以做一个压缩,既然已经可以用诗名来获取诗句;那就没必要索引到诗句了,直接索引到诗名就可以了

Elasticsearch基本概念_第4张图片

value现在不存诗句,改存诗名,这样数据量会减少很多;同时这里的诗名可以看作是正向索引;
当然这还是只有一首诗的情况,多首诗还会形成索引矩阵:

Elasticsearch基本概念_第5张图片

捋一下他们的关系

Elasticsearch基本概念_第6张图片
则可以根据情况来建立索引
Elasticsearch基本概念_第7张图片

其实像百度、谷歌等搜索引擎的原理,和刚刚背诗是一样的,最核心的都是建立倒排索引!

三、分词

搜索引擎都是对文章分词之后,再根据关键字建立倒排索引
Elasticsearch基本概念_第8张图片
搜索引擎三大过程:爬取内容、进行分词、建立反向索引

四、使用

比如一首诗,有诗题、作者、朝代、字数、诗内容等字段,那么首先,我们可以建立一个名叫 Poems 的索引,然后创建一个名叫 Poem 的类型,类型是通过 Mapping 来定义每个字段的类型。

Elasticsearch基本概念_第9张图片

类型相当于表结构的描述,描述每个字段的类型,文档以json形式描述一行数据
Keyword和text虽然都死字符串;但是涉及到分词的问题,keyword类型是不会分词的,直接用其中的内容建立反向索引;Text 类型在存入 Elasticsearch 的时候,会先分词,然后根据分词后的内容建立反向索引

建立索引

Elasticsearch 把操作都封装成了 HTTP 的 API,我们只要给 Elasticsearch 发送 HTTP 请求就行。
比如使用 curl -XPUT ‘http://ip:port/poems’,就能建立一个名为 Poems 的索引,其他操作也是类似的。

五、Elasticsearch 分布式原理

Elasticsearch 也是会对数据进行切分,同时每一个分片会保存多个副本,其原因和 HDFS (hadoop分布式文件系统)是一样的,都是为了保证分布式环境下的高可用。

Elasticsearch基本概念_第10张图片

绿色表示数据块,其实elasticsearch中数据块也是备份存储至多个节点中的;所以elasticsearch也是master-slave(主从)框架;在 Elasticsearch 中,节点是对等的,节点间会通过自己的一些规则选取集群的 Master,Master 会负责集群状态信息的改变,并同步给其他节点。

Elasticsearch基本概念_第11张图片

如图所示,建立索引的请求先发到master,master建立索引后,然后这个信息再同步给其他节点(将集群状态同步至slave),建立mapping也是类似的

六、ELK系统

Elasticsearch除了做搜索引擎,还有一些其他典型的应用场景;很多公司都用 Elasticsearch 搭建 ELK 系统,也就是日志分析系统。其中 E 就是 Elasticsearch,L 是 Logstash,是一个日志收集系统,K 是 Kibana,是一个数据可视化平台。

Elasticsearch基本概念_第12张图片

Logstash采集业务系统日志,存储到es中,通过kibana展现给运维人员分析。分析日志的用处很大,假如一个分布式系统有 1000 台机器,系统出现故障时,我要看下日志,还得一台一台登录上去查看,非常麻烦;但是如果日志接入了 ELK 系统就不一样。比如系统运行过程中,突然出现了异常,在日志中就能及时反馈,日志进入 ELK 系统中,我们直接在 Kibana 就能看到日志情况。如果再接入一些实时计算模块,还能做实时报警功能。

问题

写入性能会不会很低?

注意:只有建立索引和类型需要经过 Master,数据的写入有一个简单的 Routing 规则,可以 Route 到集群中的任意节点,所以数据写入压力是分散在整个集群的。

你可能感兴趣的