美文网首页
ElasticSearch

ElasticSearch

作者: 赵恩栋 | 来源:发表于2022-03-20 19:54 被阅读0次

    ElasticSearch

    一、ElasticSearch概述

    Elaticsearch,简称为es,es是一个开源的高扩展的<mark style="box-sizing: border-box; background: rgb(255, 255, 0); color: rgb(0, 0, 0);">分布式全文检索引擎</mark>,它可以近乎<mark style="box-sizing: border-box; background: rgb(255, 255, 0); color: rgb(0, 0, 0);">实时的存储、检索数据</mark>;本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是 通过简单的<mark style="box-sizing: border-box; background: rgb(255, 255, 0); color: rgb(0, 0, 0);">RESTful API</mark>来隐藏Lucene的复杂性,从而让全文搜索变得简单 。

    据国际权威的数据库产品评测机构DB Engines的统计,在2016年1月,ElasticSearch已超过Solr等,成为排名第一的搜索引擎类应用。

    谁在使用:

    1、维基百科,类似百度百科,全文检索,高亮,搜索推荐/2(权重,百度!)

    2、The Guardian (国外新闻网站) ,类似搜狐新闻,用户行为日志(点击,浏览,收藏,评论) +社交网络数据(对某某新闻的相关看法) ,数据分析,给到每篇新闻文章的作者,让他知道他的文章的公众反馈(好,坏,热门,垃圾,鄙视,崇拜)

    3、Stack Overflow (国外的程序异常讨论论坛) ,,IT问题,程序的报错,提交上去,有人会跟你讨论和回答,全文检索,搜索相关问题和答案,程序报错了,就会将报错信息粘贴到里面去,搜索有没有对应的答案

    4、GitHub (开源代码管理),搜索 上千亿行代码

    5、电商网站,检索商品

    6、日志数据分析,logstash采集日志,ES进行复杂的数据分析,<mark style="box-sizing: border-box; background: rgb(255, 255, 0); color: rgb(0, 0, 0);">ELK技术,elasticsearch+logstash+kibana</mark>

    7、商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时候,发送通知消息给用户,比如说订阅牙膏的监控,如果高露洁牙膏的家庭套装低于50块钱,就通知我,我就去买

    8、BI系统,商业智能, Business Intelligence。比如说有个大型商场集团,BI ,分析一下某某区域最近3年的用户消费 金额的趋势以及用户群体的组成构成,产出相关的数张报表, **区,最近3年,每年消费金额呈现100%的增长,而且用户群体85%是高级白领,开一个新商场。ES执行数据分析和挖掘, Kibana进行数据可视化

    9、国内:站内搜索(电商,招聘,门户,等等),IT系统搜索(OA,CRM,ERP,等等),数据分析(ES热门的一一个使用场景)

    1、什么是全文检索

    1.1 数据分类

    我们生活中的数据总体分为两种:结构化数据非结构化数据

    结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。

    非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等磁盘上的文件

    1.2 结构化数据搜索

    常见的结构化数据也就是数据库中的数据。在数据库中搜索很容易实现,通常都是使用sql语句进行查询,而且能很快的得到查询结果。

    为什么数据库搜索很容易?

    因为数据库中的数据存储是有规律的,有行有列而且数据格式、数据长度都是固定的。

    1.3 非结构化数据查询方法

    (1)顺序扫描法

    所谓顺序扫描,比如要找内容包含某一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。如利用windows的搜索也可以搜索文件内容,只是相当的慢。

    (2)全文检索

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

    例如:字典。字典的拼音表和部首检字表就相当于字典的索引,对每一个字的解释是非结构化的,如果字典没有音节表和部首检字表,在茫茫辞海中找一个字只能顺序扫描。然而字的某些信息可以提取出来进行结构化处理,比如读音,就比较结构化,分声母和韵母,于是将读音拿出来按一定的顺序排列,每一项读音都指向此字的详细解释的页数。我们搜索时按结构化的拼音搜到读音,然后按其指向的页数,便可找到我们的非结构化数据——也即对字的解释。

    这种先建立索引,再对索引进行搜索的过程就叫全文检索

    虽然创建索引的过程也是非常耗时的,但是索引一旦创建就可以多次使用,全文检索主要处理的是查询,所以耗时间创建索引是值得的。

    2、全文检索的实现流程

    image-20220320083424129

    3、Elasticsearch与mysql的区别

    3.1 响应时间

    MySQL

    背景:当数据库中的文档数仅仅上万条时,关键词查询就比较慢了。如果一旦到企业级的数据,响应速度就会更加不可接受。

    原因:在数据库做模糊查询时,如LIKE语句,它会遍历整张表,同时进行字符串匹配。

    例如,在数据库查询“手机”时,数据库会在每一条记录去匹配“手机”这两字是否出现。实际上,并不是所有记录都包含“手机”,所以做了很多无用功。

    这个步骤都不高效,而且随着数据量的增大,消耗的资源和时间都会线性的增长。

    Elasticsearch

    提升:小张使用了ES搜索服务后,发现这个问题被很好解决,TB级数据在毫秒级就能返回检索结果,很好地解决了痛点。

    原因:Elasticsearch是基于倒排索引的,例子如下。

    image-20220320084152889

    当搜索“手机”时,Elasticsearch就会立即返回文档F,G,H。这样就不用花多余的时间在其他文档上了,因此检索速度得到了数量级的提升。

    3.2 分词

    MySQL

    背景:在做中文搜索时,组合词检索在数据库是很难完成的。

    例如,当用户在搜索框输入“四川火锅”时,数据库通常只能把这四个字去进行全部匹配。可是在文本中,可能会出现“推荐四川好吃的火锅”,这时候就没有结果了。

    原因:数据库并不支持分词。如果人工去开发分词功能,费时费精力。

    Elasticsearch

    提升:使用ES搜索服务后,就不用太过于关注分词了,因为Elasticsearch支持中文分词插件,很好地解决了问题。

    原因:当用户使用Elasticsearch时进行搜索时,Elasticsearch就自动帮他分好词了。

    例如 输入“四川火锅”时,Elasticsearch会自动做下面两件事

    (1) 将“四川火锅”分词成“四川”和“火锅” (2) 查找包含这两个词的文档

    3.3 相关性

    MySQL

    背景:在用数据库做搜索时,结果经常会出现一系列不匹配的文档。思考: · 到底什么文档是用户真正想要的呢? · 怎么才能把用户想看的文档放在搜索列表最前面呢?

    原因:数据库并不支持相关性搜索。

    例如,当用户搜索“咖啡厅”的时候,他很可能更想知道附近哪里可以喝咖啡,而不是怎么开咖啡厅。

    Elasticsearch

    提升:使用了ES搜索服务后,发现Elasticsearch能很好地支持相关性评分。通过合理的优化,ES搜索服务能够返回精准的结果,满足用户的需求。

    原因:Elasticsearch支持全文搜索和相关度评分。这样在返回结果就会根据分数由高到低排列。分数越高,意味着和查询语句越相关。

    例如,当用户搜索“星巴克咖啡”,带有“星巴克咖啡”的信息就要比只包含“咖啡”的信息靠前。

    总结

    1.传统数据库在全文检索方面很鸡肋,海量数据下的查询很慢,对非结构化文本数据的不支持,ES支持非结构化数据的存储和查询。

    2.ES支持分布式文档存储。

    3.ES是分布式实时搜索,并且响应时间比关系型数据库快。

    4.ES在分词方面比关系型好,能做到精确分词。

    5.ES对已有的数据,在数据匹配性方面比关系型数据库好, 例如:搜索“星巴克咖啡”,ES会优先返回带有“星巴克咖啡”的数据,不会优先返回带有“咖啡”的数据。

    ElasticSearch和MySql分工不同,MySQL负责存储数据,ElasticSearch负责搜索数据。

    相关文章

      网友评论

          本文标题:ElasticSearch

          本文链接:https://www.haomeiwen.com/subject/cdeadrtx.html