前言
官方网址:www.elastic.co
官方描述:Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,同时是可扩展的数据存储和矢量数据库,能够应对日益增多的各种用例。作为 Elastic Stack 的核心,Elasticsearch 能够集中存储您的数据,实现闪电般的搜索速度、精细的相关性调整以及强大的分析能力,并且能够轻松地进行规模扩展。
本文章将依照本人的实际研究所得展开讲述,若有差错,敬请批评,还望海涵~
Elasticsearch介绍
来源:
- Elasticsearch是基于Apache Lucene构建的。Lucene是目前公认的性能最好、最先进的、功能最全的搜索引擎库。Lucene的核心是倒排索引,它能够实现高效查询,精准定位。在后面会展开描述。
Elasticsearch的优点
-
分布式架构:Elasticsearch使用分布式架构,可以在多个节点上存储和处理数据,提高了系统的可靠性和容错性。
-
高性能:依靠倒排索引,能够处理大规模的数据集,并在几毫秒内提供搜索结果。
-
可扩展性:可以轻松地扩展到多个节点,以处理大量的数据和请求,支持动态扩容和缩容。
-
实时性:能够实时地索引和搜索数据,使得用户可以快速获取最新的信息。
Mysql模糊查询的缺点
当数据库的数据量庞大时,因为Mysql模糊查询不走索引,要对数据库进行全盘扫描,执行以下指令进行模糊查询时效率极低
select * from user where username like '%a%'
Elasticsearch能为查询关键词统一添加索引,在查询时能够快速精准的拿到对应的数据,优化了查询效率。
Elasticsearch的完整的技术栈
如上图所示,Logstash或者Beats数据收集之后,数据由Elasticsearch进行存储、计算和搜索,最后由Kibana对数据可视化展示。
倒排索引
倒排索引(Inverted Index)是一种常见的文本索引方法
- 文档(
Document):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息 - 词条(
Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。
词条是由IK分词器(或其他类型的分词器)对数据库的文档内容进行分词
IK分词器
Elasticsearch利用IK分词器对数据库的文档内容进行分词,并创建词条文档,记录词条来源的数据id。如下图所示
如上图所示,其中每个词条都是唯一的,并且词条文档记录了词条的出处id(对应的文档id),利用倒排索引我们可以在模糊查询,或者复杂的词条查询的时候,能快速的找到对应词条的文档出处。
粒度切分
另外,IK分词器提供了智能语义切分和最细粒度区分,我们在使用Elasticsearch时,可以依照对用的场景进行选择,在查询时将搜索内容进行分词,再去对应词条文档,找到与词条意思最接近的数据ID提供给数据库查找。
拓展词条
拓展词条是对词条文档的扩充,其中的词条内容为一些网络常见时效性的词语等等,其意思并不是正式的词语用句,但因为广为流行,而纳入词库。
停用词条
停用词条主要为一些社会性的违禁词语,违反社会核心价值观,或者是根据业务场景希望避免的搜索词条。