大数据技术之ElasticSearch

115 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第 5 天,点击查看活动详情

对于大数据,我们也许对流式计算引擎FLink,批式计算引擎Spark非常了解,但可能对ElasticSearch并不是非常清楚,那么我们本篇文章就来讲一下分布式搜索和分析引擎ElasticSearch。

1. ElasticSearch概述

1.1 什么是搜索

搜索,就是在任何场景下,找寻你想要的信息,这个时候,会输入一段你要搜索的关键字,然后就期望找到这个关键字相关的一些信息。

当我们想找寻任何的信息的时候,就会上百度去搜索一下,或者找一部自己喜欢的电影,或者找一条感兴趣的新闻(这是我们提到搜索的第一印象)。但是要注意 百度 != 搜索

1)互联网的搜索:电商网站,招聘网站,新闻网站,各种app

2)IT系统的搜索:OA软件,办公自动化软件,会议管理,日程管理,项目管理。

所以我们不禁提出疑问,如果我们使用数据库来做搜索会怎么样?对于此问题我们通过下图来讲述一下。

image.png 1)比如说“商品描述”字段的长度,有长达数千个,甚至数万个字符,这个时候,每次都要对每条记录的所有文本进行扫描以此来判断是否包含我指定的这个关键词(比如说“牙膏”),效率非常低。
2)不能将搜索词拆分开来,尽可能去搜索更多的符合你的期望的结果,比如输入“生化机”,就搜索不出来“生化危机”。

以此我们可以得出,用数据库来实现搜索,是不太靠谱的,通常来说,性能会很差的。

1.2 什么是全文检索和Lucene

全文检索

全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。

Lucene lucene,就是一个jar包,里面包含了封装好的各种建立倒排索引,以及进行搜索的代码,包括各种算法。我们使用java开发的时候,引入lucene jar,然后基于lucene的api进行开发。

1.3 什么是Elasticsearch

Elasticsearch,是一个实时分布式搜索和分析引擎。它用于全文搜索、结构化搜索 和 数据分析。Elasticsearch基于Lucene,隐藏复杂性,提供简单易用的Restful API接口、Java API接口(还有其他语言的API接口)。

全文检索:将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。

结构化检索:我想搜索商品分类为日化用品的商品都有哪些,select * from products where category_id='日化用品'。

数据分析:电商网站,最近7天牙膏这种商品销量排名前10的商家有哪些;新闻网站,最近1个月访问量排名前3的新闻版块是哪些。

2. Elasticsearch的特点

(1)天然分片,天然集群

ES 把数据分成多个shard,下图中的P0-P2,多个shard可以组成一份完整的数据,这些shard可以分布在集群中的各个机器节点中。随着数据的不断增加,集群可以增加多个分片,把多个分片放到多个机器上,以此达到负载均衡,横向扩展。

image.png

(2)Elasticsearch 不是什么新技术,主要是将全文检索、数据分析以及分布式技术,合并在一起以此形成了独一无二的ES;lucene(全文检索),商用的数据分析软件(也是有的),分布式数据库(mycat);

(3)对用户而言,是开箱即用的,非常简单,作为中小型的应用,直接3分钟部署一下ES,就可以作为生产环境的系统来使用,数据量不大,操作不是太复杂;

(4)数据库的功能面对很多领域是不够用的(事务,还有各种联机事务型的操作);特殊的功能,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理;Elasticsearch 作为传统数据库的一个补充,提供了数据库所不能提供的很多功能。