ElasticSearch简称为ES,以后就使用ES作为描述了

一: 前提内容

1.1 es

ElasticSearch就是一个搜索服务器

说明其就是一个软件,安装之后就可以使用了

搜索:

搜索就是查询

1.2 关系型数据库查询的问题

问题1:如果使用模糊查询,左边有通配符(%等),不会走索引,会全表扫描,性能低

使用通配符后,在数据表中的当前列上作用的索引会失效(当数据比较多时,可以对列名加上索引,提升查询的性能)

问题2:关系型数据库提供的查询,功能太弱

二: 倒排索引

前面两种问题可以通过倒排索引进行解决

2.1 正向索引

根据诗名去得到诗句,如下:
在这里插入图片描述

2.2 倒排索引

将一段文本按照一定的规则,拆分为不同的词条(term)

在es中,分词是ES自动帮我们生成的

比如:将“床前明月光”和“明月几时有”进行分词,如何可以按下图进行存储
在这里插入图片描述

定义:将各个文档中的内容,进行分词,形成词条。然后记录词条和数据的唯一标识(id)的对应关系,形成的产物

三: ES数据的存储和搜索原理

3.1 存储

这个与自然语言处理中的知识点类似,写过自然语言处理还是比较容易懂的

ES中数据叫做document(文档),相当于关系型数据库中表的一条记录

ES中文档是以json格式的数据进行存储到索引库中的,es将document里面的所有内容进行分词,没有的词条再次增加,最后的倒排索引结果如下
在这里插入图片描述

3.2 搜索

数据库查询存在的问题:

1.性能低:使用模糊查询,左边有通配符,不会走索引,会全表扫描,性能低
2.功能弱:如果以”华为手机“作为条件,查询不出来数据

es中的搜索步骤如下:

es中的term会以一种树形结构进行存储
es会将搜索的内容首先进行分词,然后才去分词,最后对结果进行求交集或并集

在这里插入图片描述
解决性能低:

使用“手机”作为关键字查询

  1. 如:生成的倒排索引中,词条会排序,形成一颗树形结构,提升词条的查询速度

解决功能弱:

使用“华为手机”作为关键字查询

  1. es会将搜索的内容首先进行分词,然后才去分词,最后对结果进行求交集或并集,将图中内容进行如下获取:
    华为:1,3
    手机: 1,2,3
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐