ElasticSearch(1)ES数据的存储和搜索原理
ElasticSearch简称为ES,以后就使用ES作为描述了一: 前提内容1.1 esElasticSearch就是一个搜索服务器说明其就是一个软件,安装之后就可以使用了搜索:搜索就是查询1.2 关系型数据库查询的问题问题1:如果使用模糊查询,左边有通配符(%等),不会走索引,会全表扫描,性能低使用通配符后,在数据表中的当前列上作用的索引会失效(当数据比较多时,可以对列名加上索引,提升查询的性能
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会将搜索的内容首先进行分词,然后才去分词,最后对结果进行求交集或并集
解决性能低:
使用“手机”作为关键字查询
- 如:生成的倒排索引中,词条会排序,形成一颗树形结构,提升词条的查询速度
解决功能弱:
使用“华为手机”作为关键字查询
- es会将搜索的内容首先进行分词,然后才去分词,最后对结果进行求交集或并集,将图中内容进行如下获取:
华为:1,3
手机: 1,2,3
更多推荐
所有评论(0)