ElasticSearch

简介

es是一个高度可伸缩的开源全文搜索引擎,es让你可以快速,实时地存储,搜索和分析大量数据,它通常作为互联网应用的内部搜索引擎,为需要复杂搜索功能的应用提供支持。

es是一个基于Lucene的搜索服务器 。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口,es使用java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。

使用场景

电商搜索引擎,使用es存储商品与品类信息,提供搜索和搜索建议功能。

日志系统,收集,分析日志数据,可以使用Logstash(es,logstash,kibana 栈的一部分)来收集,然后将这些数据提供给es,通过搜索和聚合计算挖掘有价值的信息,最后用过kibana进行可视化展示。

价格提醒平台,在价格变动时,让用户可以收到通知,抓取供应商的价格,推入es,并使用反向搜索(Percolator)功能来匹配用户的价格通知设置,找到匹配后将提醒推送给用户。

BI(商业智能),分析业务大数据,挖掘有价值的商务信息,可以使用es来存储数据,然后使用kibana(es,logstash,kibana 堆栈的一部分)构建自定义仪表板,该仪表板可以可视化显示数据,此外,还可以使用es聚合功能对数据执行复杂的业务智能分析。

es与其它数据存储进行比较

es的特点

1:天然分片,天然集群

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

在实际运算过程中,每个查询任务提交到某一个节点,该节点必须负责将数据进行整理汇聚,再返回给客户端,也就是一个简单的节点上进行map计算,在一个固定的节点上进行reduces得到最终结果向客户端返回。

这种集群分片的机制造就了es强大的数据容量及运算扩展性。

天然索引

es所有数据都是默认进行索引的,这点和mysql正好相反,mysql是默认不加索引,要加索引必须特别说明,es只有不加索引才需要说明。

而es使用的是倒排索引和MySQL的b+tree不同。

传统性数据库

弊端

对于传统的关系性数据库对于关键词的查询,只能逐字逐行的匹配,性能非常差。

匹配方式不合理,比如搜索"小蜜手机",如果用like进行匹配,根本匹配不到。

但是考虑使用者的用户体验的话,除了完全匹配的记录,还应该显示一部分近似匹配

的记录,至少应该匹配到"手机"。

倒排索引是怎么处理的

全文搜索引擎目前主流的索引技术就是倒排索引的方式

传统的保存数据的方式都是:记录------》单词

而倒排索引的保存数据的方式是:单词------》记录,基于分词技术构建倒排索引,每个记录保存数据时,都不会直接存入数据库,系统先会对数据进行分词,然后以倒排索引结构保存。

如下:

搜索"红海行动",那么搜索引擎时如何能将两者匹配上的呢?

等到用户搜索的时候,会把搜索的关键词也进行分词,会把"红海行动"分词分成:红海和行动两个词。

这样的话,先用红海进行匹配,得到id'=1和id=2的记录编号,再用行动匹配可以迅速定位id为1,3的记录。

那么全文索引通常还会根据匹配程度进行划分,显然1号记录能匹配的此数更多。

所以显示的时候以评分进行排序的话,1号记录会排到最前面,而2,3号记录也可以匹配到。
➢ 索引结构对比

Lucene 倒排索引结构

可以看到Lucene为倒排索引部分又增加一层Term index结构,用于快速定位,而这term index是缓存在内存中,但mysql的B+tree不在内存中,所以整体来看es速度更快,但同时也更消耗资源(内存,磁盘)。

Lucene,Nutch,ElastisSearch关系

1998年9月4日,Google公司在美国硅谷成立,正如大家所知,正如大家所知,它是一家做搜索引擎起家的公司

同时期,一位名叫Doug Cutting的美国工程师,也迷上了搜索引擎,他基于java语言开发了一个用于文本搜索的函数库(可以理解为软件的功能组件),叫做Lucene。

Lucene是第一个提供全文文本搜索的函数库,提供了一个简单而强大的应用程序接口,是一个高性能,可伸缩的信息搜索库。作为一个成熟免费的开源项目,Lucene在java信息检索程序库中得到了广泛的欢迎,开发者不仅能利用它构建 具体的全文检索引用,同时还能将其集成到各种系统软件中,它提供的很多API函数都能运用到各种实际应用程序中,

Nutch则是Doug在Lucene基础上将开源思想继续深化的成果,是一个真正的应用程序,它是建立在Lucene核心之上的web搜索的实现,其目的旨在减少人们使用过程中的复杂度,并在花费很少的情况下配置世界一流的web搜索引擎,实现开箱即用的特性,站内索引和搜索推广到全球网络的搜索上,就像Goole和雅虎一样。

ElasticSearch,简称为es,es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储,检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据,es也使用java开发并使用java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

DB Engines 统计的数据库排名情况,在2016年1月,Es已超过Solr等成为排名第一的搜索引擎类应用

关于ES的起源,他说当年他还是一个待业工程师,跟随自己的新婚妻子来到伦敦,妻子想在伦敦学习做一名厨师,而自己则想为妻子开发一个搜索菜谱的应用,所以才接触到Lucene。

直接使用Lucene构建搜索又很多问题,包含大量重复性的工作,所以Shay Banon便在Lucene的基础上不断地进行抽象,让java程序嵌入搜索变得更容易,经过一段时间的打磨便诞生了

他的第一个开源作评"Compass",中文即"指南针"的意思。之后他找到了一份面对高性能分布式开发环境的新工作,在工作中他渐渐发现越来越需要一个易用的,高性能,实时,分布式搜索服务,于是决定重写Compass,将它从一个库打造成了一个独立的server,并创建了Elasticsearch。

思考:咱们之前说的处理分词,构建倒排索引,等等,都是这个叫Lucene的做的,那么能不能说这个Lucene就是搜索引擎呢?

还不能,Lucene只是一个提供全文搜索功能类库的核心工具包,而真正使用它还需要一个完善的服务框架搭建起来的应用。

好比Lucene是类似于发动机,而搜索引擎软件(es,solr)就是汽车。

目前市面上流行的搜索引擎软件,主流的就两款,es和solr,这两款都是基于Lucene的搭建的,可以独立部署启动的搜索引擎服务软件,由于内核相同,所以两者除了服务器安装,部署,管理,集群以外,对于数据的操作,修改,添加,保存,查询等等都十分类似,就好像都是支持sql语言的两种数据库软件,只要学会其中一个另一个很容易上手。

从实际企业使用情况来看,es的市场份额逐步在取代solr,国内百度,京东,新浪都是基于es

实现的搜索功能,国外就更多了,像维基百科,GitHub,等等也都是基于es的。

es的介绍到此就结束了,下期为大家带来es安装,部署及使用,seeyou!

相关推荐
TDengine (老段)1 小时前
TDengine 数学函数 DEGRESS 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
TDengine (老段)1 小时前
TDengine 数学函数 GREATEST 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
失散132 小时前
分布式专题——47 ElasticSearch搜索相关性详解
java·分布式·elasticsearch·架构
字节数据平台2 小时前
火山引擎Data Agent再拓新场景,重磅推出用户研究Agent
大数据·人工智能·火山引擎
铭毅天下5 小时前
Elasticsearch 到 Easysearch 数据迁移 5 种方案选型实战总结
大数据·elasticsearch·搜索引擎·全文检索
跨境小新5 小时前
Facebook广告投放:地域定向流量不精准?x个优化指南
大数据·facebook
ZKNOW甄知科技6 小时前
客户案例 | 派克新材x甄知科技,构建全场景智能IT运维体系
大数据·运维·人工智能·科技·低代码·微服务·制造
币须赢6 小时前
688758赛分科技 阴上阴形态 洗盘上涨?
大数据
学掌门7 小时前
大数据知识合集之预处理方法
大数据
Elastic 中国社区官方博客8 小时前
Elasticsearch 推理 API 增加了开放的可定制服务
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索