分布式搜索引擎----elasticsearch

目录

1、初识elasticsearch

1.1、什么是elasticsearch

1.2.ELK技术栈

2、正向索引和倒排索引

2.1、正向索引

2.2、倒排索引

2.3、正向索引和倒排索引的区别

3、elasticsearch中的概念理解

3.1、文档和字段

3.2、索引和映射

3.3、mysql与elasticsearch


1、初识elasticsearch

1.1、什么是elasticsearch

        elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容。

        elasticsearch结合kibanaLogstashBeats,也就是elastic stackELK)。被广泛应用在日志数据分析、实时监控等领域。

架构:

        Mysql:擅长事务类型操作,可以确保数据的安全和一致性。

        Elasticsearch:擅长海量数据的搜索、分析、计算。

1.2.ELK技术栈

        elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。

总结:

        什么是elasticsearch?

                 一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能

        什么是elastic stack(ELK)?

                是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch

        什么是Lucene?

                是Apache的开源搜索引擎类库,提供了搜索引擎的核心API

2、正向索引和倒排索引

2.1、正向索引

        传统数据库(如MySQL)采用正向索引,例如给下表(tb_goods)中的id创建索引

如果是根据id查询,那么直接走索引,查询速度非常快。

但如果是基于title做模糊查询,只能是逐行扫描数据,流程如下:

        (1)用户搜索数据,条件是title符合`"%手机%"`(索引失效)

        (2)逐行获取数据,比如id为1的数据

        (3)判断数据中的title是否符合用户搜索条件

        (4)如果符合则放入结果集,不符合则丢弃。回到步骤1

        逐行扫描,也就是全表扫描,随着数据量增加,其查询效率也会越来越低。当数据量达到数百万时,就是一场灾难。

2.2、倒排索引

倒排索引中有两个非常重要的概念:

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

创建倒排索引是对正向索引的一种特殊处理,流程如下:

  • 将每一个文档的数据利用算法分词,得到一个个词条

  • 创建表,每行数据包括词条、词条所在文档id、位置等信息

  • 因为词条唯一性,可以给词条创建索引,例如hash表结构索引

如图:

 倒排索引的搜索流程如下(以搜索"华为手机"为例):

        虽然要先查询倒排索引,再查询倒排索引,但是无论是词条、还是文档id都建立了索引,查询速度非常快!无需全表扫描。 

2.3、正向索引和倒排索引的区别

  • 正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程

  • 倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程

正向索引

  • 优点:

    • 可以给多个字段创建索引

    • 根据索引字段搜索、排序速度非常快

  • 缺点:根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描

倒排索引

  • 优点:根据词条搜索、模糊搜索时,速度非常快

  • 缺点:

    • 只能给词条创建索引,而不是字段

    • 无法根据字段做排序

3、elasticsearch中的概念理解

3.1、文档和字段

        elasticsearch是面向文档存储的,可以是数据库中的一条商品数据,一个订单信息。文档数据会被序列化为json格式后存储在elasticsearch中。

        而Json文档中往往包含很多的字段(Field),类似于数据库中的列。

3.2、索引和映射

索引(index :相同类型的文档的集合
映射(mapping :索引中文档的字段约束信息,类似表的结构约束

        因此,我们可以把索引当做是数据库中的。数据库的表会有约束信息,用来定义表的结构、字段的名称、类型等信息。因此,索引库中就有映射(mapping),是索引中文档的字段约束信息,类似表的结构约束。

 3.3、mysql与elasticsearch

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rk..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值