系列课程 ElasticSearch 之第 1 篇 —— 了解 ElasticSearch

OK,这个系列教程我们主要学习 ElasticSearch。去到大型互联网公司,这可是必备技能!

什么是 ElasticSearch?

百度百科 ElasticSearch

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch 还是一个分布式文档数据库,其中每个字段均是被索引的数据且可被搜索,它能够扩展至数以百计的服务器存储以及处理PB级(1024G=1TB,1024G=1PB)的数据。它可以在很短的时间内在储、搜索和分析大量的数据。它通常作为具有复杂搜索场景情况下的核心发动机,也就是搜索引擎。

ElasticSearch 有什么优势?

1、横向可扩展性:方便建立集群。需要增加台服务器,做一点儿配置,启动一下 ElasticSearch 就可以并入集群。

2、分片机制提供更好的分布性:同一个索引分成多个分片(sharding),这点类似于 HDFS 的块机制;分而治之的方式可提升处理效率。

3、高可用:提供复制( replica) 机制,一个分片可以设置多个复制,使得某台服务器在宕机的情况下,集群仍旧可以照常运行,并会把服务器宕机丢失的数据信息复制恢复到其他可用节点上。

ElasticSearch 应用场景有哪些?

1、大型分布式日志分析系统 ELK :elasticsearch(存储日志)+ logstash(收集日志) + kibana(展示数据)

2、大型电商商品搜索系统、网站站内搜索、网盘搜索引擎等。

ElasticSearch 工作原理?

ElasticSearch 从多个数据来源(比如日志收集,系统运行指标,网络应用程序等)收集数据,经过解析并标准化处理,建立完整索引后,就可以进行复杂的聚合查询了。结合 Kibana 进行可视化页面的查询、管理。

ElasticSearch存储结构

Elasticsearch 使用的是一种名为倒排索引的数据结构,这一结构的设计可以允许十分快速地进行全文本搜索倒排索引会列出在所有文档中出现的每个特有词汇,并且可以找到包含每个词汇的全部文档。在创建索引过程中,Elasticsearch 会存储文档并构建倒排索引。Elasticsearch是文件存储,ElasticSearch是面向文档型数据库,一条数据在这里就是一个文档,用JSON作为文档序列化的格式,比如下面这条用户数据:

{
  "name": "流放深圳",
  "sign": "让天下没有难写的代码",
  "url": "https://blog.csdn.net/BiandanLoveyou"
}

在关系型数据库(如MySQL)中,需要有数据库,表,行,字段。而在 ElasticSearch 中,对应的有:索引(index,对应数据库),类型(type,对应),文档(documents,对应),字段(Fields,对应字段)。

什么是倒排索引?

与倒排索引对应的是正向索引。

正向索引(已知文档求关键字)

正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档

这种组织方法在建立索引的时候结构比较简单,建立比较方便且易于维护;因为索引是基于文档建立的,若是有新的文档加入,直接为该文档建立一个新的索引块,挂接在原来索引文件的后面。

若是有文档删除,则直接找到该文档号文档对应的索引信息,将其直接删除。但是在查询的时候需对所有的文档进行扫描以确保没有遗漏,这样就使得检索时间大大延长,检索效率低下。     

尽管正排表的工作原理非常的简单,但是由于其检索效率太低,除非在特定情况下,否则实用性价值不大。

倒排索引(已知关键字求文档)

倒排表以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况。

由于每个字或词对应的文档数量在动态变化,所以倒排表的建立和维护都较为复杂,但是在查询的时候由于可以一次得到查询关键字所对应的所有文档,所以效率高于正排表。

在全文检索中,检索的快速响应是一个最为关键的性能,而索引建立由于在后台进行,尽管效率相对低一些,但不会影响整个搜索引擎的效率。

倒排索引举例:

文档内容如下

序号文档内容
1马云说:让天下没有难做的生意。
2星爷说:一个人假如没有梦想,跟咸鱼有什么区别?
3扁蛋说:让天下没有难写的代码。

倒排索引会对以上文档内容进行关键词分词,可以使用关键词直接定位到文档内容。

单词ID单词倒排文档ID
11,2,3
2马云1
3星爷2
4扁蛋3
5天下1,3
6没有1,2,3
7生意1
8梦想2
9咸鱼2
10代码3
............

为何使用 Elasticsearch?

1、Elasticsearch 很快。由于 Elasticsearch 是在 Lucene 基础上构建而成的,所以在全文本搜索方面表现十分出色。Elasticsearch 同时还是一个近实时的搜索平台,这意味着从文档索引操作到文档变为可搜索状态之间的延时很短,一般只有一秒。

2、Elasticsearch 具有分布式的本质特征。Elasticsearch 中存储的文档分布在不同的容器中,这些容器称为分片,可以进行复制以提供数据冗余副本,以防发生硬件故障。Elasticsearch 的分布式特性使得它可以扩展至数百台(甚至数千台)服务器,并处理 PB 量级的数据。

3、Elasticsearch 包含一系列广泛的功能。除了速度、可扩展性和弹性等优势以外,Elasticsearch 还有大量强大的内置功能(例如数据汇总和索引生命周期管理),可以方便用户更加高效地存储和搜索数据。

4、Elastic Stack 简化了数据采集、可视化和报告过程。通过与 Beats 和 Logstash 进行集成,用户能够在向 Elasticsearch 中索引数据之前轻松地处理数据。同时,Kibana 不仅可针对 Elasticsearch 数据提供实时可视化,同时还提供 UI 以便用户快速访问应用程序性能监测 (APM)、日志和基础设施指标等数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值