Elasticsearch搜索引擎技术

95 阅读3分钟

前言

官方网址www.elastic.co

官方描述:Elasticsearch 是一个分布式RESTful 风格搜索和数据分析引擎,同时是可扩展的数据存储和矢量数据库,能够应对日益增多的各种用例。作为 Elastic Stack 的核心,Elasticsearch 能够集中存储您的数据,实现闪电般的搜索速度精细的相关性调整以及强大的分析能力,并且能够轻松地进行规模扩展。

本文章将依照本人的实际研究所得展开讲述,若有差错,敬请批评,还望海涵~

Elasticsearch介绍

来源:

  • Elasticsearch是基于Apache Lucene构建的。Lucene是目前公认的性能最好、最先进的、功能最全的搜索引擎库。Lucene的核心是倒排索引,它能够实现高效查询,精准定位。在后面会展开描述。

Elasticsearch的优点

  1. 分布式架构:Elasticsearch使用分布式架构,可以在多个节点上存储和处理数据,提高了系统的可靠性和容错性。

  2. 高性能:依靠倒排索引,能够处理大规模的数据集,并在几毫秒内提供搜索结果。

  3. 可扩展性:可以轻松地扩展到多个节点,以处理大量的数据和请求,支持动态扩容和缩容。

  4. 实时性:能够实时地索引和搜索数据,使得用户可以快速获取最新的信息。

Mysql模糊查询的缺点

当数据库的数据量庞大时,因为Mysql模糊查询不走索引,要对数据库进行全盘扫描,执行以下指令进行模糊查询时效率极低

select * from user where username like '%a%'

Elasticsearch能为查询关键词统一添加索引,在查询时能够快速精准的拿到对应的数据,优化了查询效率。

Elasticsearch的完整的技术栈

ES.jpg

如上图所示,Logstash或者Beats数据收集之后,数据由Elasticsearch进行存储计算搜索,最后由Kibana对数据可视化展示。

倒排索引

倒排索引(Inverted Index)是一种常见的文本索引方法

  • 文档(Document):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息
  • 词条(Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。

词条是由IK分词器(或其他类型的分词器)对数据库的文档内容进行分词

IK分词器

Elasticsearch利用IK分词器对数据库的文档内容进行分词,并创建词条文档,记录词条来源的数据id。如下图所示

IK.jpg

倒排索引.jpg 如上图所示,其中每个词条都是唯一的,并且词条文档记录了词条的出处id(对应的文档id),利用倒排索引我们可以在模糊查询,或者复杂的词条查询的时候,能快速的找到对应词条的文档出处。

粒度切分

另外,IK分词器提供了智能语义切分和最细粒度区分,我们在使用Elasticsearch时,可以依照对用的场景进行选择,在查询时将搜索内容进行分词,再去对应词条文档,找到与词条意思最接近的数据ID提供给数据库查找。

拓展词条

拓展词条是对词条文档的扩充,其中的词条内容为一些网络常见时效性的词语等等,其意思并不是正式的词语用句,但因为广为流行,而纳入词库。

停用词条

停用词条主要为一些社会性的违禁词语,违反社会核心价值观,或者是根据业务场景希望避免的搜索词条。