背 景
用着MySQL,MongonDB等查询他不香吗?为啥要去搞这个ElasticSearch,这不是找虐吗?其实ElasticSearch盛行的原因有以下几点;
- 海量数据查询时,MySQL性能确实有瓶颈,不能做到毫秒级别的实时相应;
- 查询条件手残输入错误,MySQL极有可能查不到数据,ElasticSearch因为支持分词器,依然可以快速查询到结果,如我本来想买个
热水壶
,但是我输入时抖了下,写成了水壶热
,MySQL可能就没有返回结果了,ElasticSearch可以有,原理后续解说。 - 支持搜索的关键字红色字体显示。
其实你可以完全将ElasticSearch搜索结果理解为你百度一下
的结果网页,会根据你提供的搜索条件,按匹配的权重结果返回给你,那这就是ElasticSearch的奥妙之处,在大数据如火如荼的今天,他火是必然的,不然数据只是死躺在MySQL,HDFS,磁盘等存储容器上的鸡肋一样。
ElasticSearch简介
ElasticSearchj(简称:ES)
,不要问我中文名,嘿嘿,因为大家都叫他ES,由于叫ES的东西有点多,平时如果搜索七相关资料,使用全称效果更佳;
ES
是一款使用Java
语言编写的基于Lucene
为底层的搜索引擎框架,支持分布式全文搜索功能,提供开发者使用的主要有统一的基于RESTful
风格的WEB接口和多种开发语言的API;
Lucene:Apache顶级项目,官网:https://lucene.apache.org/,本身是一个搜索引擎的底层,但是使用起来太复杂,不太友好,就连官网也推荐使用solr
,而非直接使用,这里如果不是特别必要,咱就理解其为一个Jar包;
分布式:ES本身就能搭建成集群模式,横向扩充能力强;
RESTful风格:操作ES’的方式,根据HTTP请求,执行相应的功能;
全文索引:也叫倒排索引
,将需要匹配搜索条件的一段词语根据分词器进行分词,分出的单个词语放到一个分词库中,并且标注这个词隶属于哪一个行目标数据id;于是客户端在搜索时,根据搜索内容也进行分词到分词库中去检索,然后找打匹配的内容,具体如图1;
ElasticSearch官网
官网:https://www.elastic.co/cn/;
官网的文档:是最好的学习资源,详细、全面,官网还提供有一些视频:
传送门:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
官网中还提供一个中文的权威指南,可以学习,(版本稍老了点是基于2.0的):
传送门:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
ElasticSearch应用
- GitHub.com
- wiki百科
- 某外卖,快递平台计算送货员距离你还有多少距离。
- ……
ElasticSearch和sorl的对比
- Solr在查询静态数据时,速度较ES更快一些,但是支持实时动态数据,ES速度基本没变,Solr会降低很多;
- Solr搭建集群需要借助Zookeeper来协调,ES本身支持集群搭建,不需要第三方插件,相对较为独立;
- Sorl对嵌套数据,经纬度等数据类型支持的不算特别好,要自己拼接,ES自带支持的数据类型。
- ES对目前的云计算和大数据支持的较为友好;
目前看起来,solr的唯一优势时资历老,社区可能较多一些,但是个人感觉ES的发展趋势大有取代solr的架势,本人公司也是新的需求都在使用ES,老的在solr上的往ES迁移。
ElasticSearch和MySQL的对比
上图吧,直接一目了然,这样对你理解ES的数据结构有比较好的帮助,对比如图2,ES的数据样式如图3
注意:关于类似于MySQL的表级别的Type,需要根据ES的版本而论:
ES5.X及其以前,一个Index下可以有多个Type
ES6.X,一个Index下可以有一个Type
ES7.X及其以后,一个Index下不需要Type
ElasticSearch的由来
起源于一个浪漫的爱情故事;
许多年前,一个名叫Shay Banon的开发者,带着新婚妻子去伦敦生活,在得知妻子想从事厨师工作后,准备利用自己所学为妻子开发一个食谱搜索引擎,他开始使用Lucene的一个早期版本。
但是尝试之后,他发现直接使用Lucene给没有任何开发经验的妻子而言是非常困难的,因此Shay 开始对Lucene进行封装。不久他发布了他的第一个基于Lucene的用java编写的开源项目 Compass。
后来Shay找到了一份跟高性能和分布式有关的工作,然后发现这份工作对实时、分布式搜索引擎的需求尤为突出,于是他决定重写Compass,把它变为一个独立的服务并取名Elasticsearch,再到后来Elasticsearch发布了第一个公开版本,从此以后,Elasticsearch已经成为了 Github 上最活跃的开源项目之一。
据说,Shay的妻子还在等着她的食谱搜索引擎,而他已经在大公司忙的“一发不可收拾”…
ElasticSearch的组成
- ES集群搭建;
- 分词器搭建,中文常用IK分词器;
- 管理界面插件Kibana,Head搭建;
以上就是ES的一些入门介绍,安装及使用后续更新中……