分布式搜索引擎----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结合kibana、Logstash、Beats,也就是elastic stack( ELK)。被广泛应用在日志数据分析、实时监控等领域。

架构:

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

相关推荐
道法自然,人法天3 小时前
分布式事务管理:使用Seata简化微服务事务处理
分布式·微服务·架构
m0_748245925 小时前
RabbitMQ高级特性----生产者确认机制
分布式·rabbitmq
BigBookX6 小时前
通过 ElasticSearch的Python API和`curl` 命令获取Elasticsearch 所有索引名称
大数据·elasticsearch·jenkins
CXH7288 小时前
elasticsearch 8.17.3部署文档
大数据·elasticsearch
心存の思念10 小时前
分布式系统中分布式ID生成方案的技术详解
分布式
Elasticsearch13 小时前
使用 Elasticsearch 构建多模式 RAG 系统:哥谭市的故事
elasticsearch
青云交13 小时前
Java 大视界 -- 基于 Java 的大数据分布式数据库架构设计与实践(125)
java·大数据·分布式·分布式数据库·架构设计·数据处理·高可用性
犀思云13 小时前
领先AI企业经验谈:探究AI分布式推理网络架构实践
人工智能·分布式·ai网络
MarkHD14 小时前
第二十五天 实践分布式数据管理,实现数据在多设备间的同步
分布式·wpf
不爱学习的小枫15 小时前
spark常见的submit参数
大数据·分布式·spark