文章目录
ElasticSearch
ElasticSearch是一个搜索的服务器
也就是我们经常在网页中见到的搜索框
为什么要用
我们在没有ElasticSearch的时候,使用过数据库做操作
数据库缺点
性能低
功能弱
我们想要将搜索的内容进行拆分查找
华为手机分为华为和手机进行查找
数据库此时就显得很简单。而且对性能和SQL都要求很高
ElasticSearch的倒排索引就可以解决上面的问题
倒排索引
我们想要所有诗句中带有前的古诗
正常我们存储是正向索引,而倒向索引在存储的时候就是不一样的
正向索引
我们只能将诗句进行模糊查询
倒向索引
在存入数据的数据的时候
会进行拆分为不同的词条(term)
将各个文档的内容,进行分词,形成词条。然后记录词条和数据的唯一标识(id)对应关系。
举例
存入静夜思的诗句时候
当在存入水调歌头的时候
发现问题
如果只存储数据中一部分内容。对于value部分过于繁琐
所以拆分**词条(term)**之后,我们存入数据的唯一标识
数据存储和搜索原理
ElasticSearch将数据存入到索引库中。
将文档数据进行分条。在存入索引库中
数据存储
搜索原理
数据库中存在的问题
- 性能低:数据库中的数据过多,使用模糊查询的时候在左边可能不能使用索引。而且数据库的数据量也是很大的
- 功能弱:想要将搜索的条件进行拆分查找也不容易
Elk
使用(手机)作为条件时候
生成的倒排索引中,词条会排序,形成一颗树形结构,提升词条的查询速度
查询的就是1,2,3
使用(华为手机)搜索
进行条件拆分
华为:1,3
手机:1,2,3
是什么
ElasticSearch是一个基于Lucene的搜索服务器
Lucene是一个搜索的api。包含许多操作。ElasticSearch相当于封装了
Lucene下还有一个搜索服务器。出来更早。ElasticSearch出来晚,所以功能更加丰富
是一个分布式,高扩展,高实时的搜索与数据分析引擎
基于RestFul Web接口(我们在操作的时候就是Http请求。使用脚本写Restful操作)
ElasticSearch是用java开发的,并作为Apache许可条款的开发源码发布。
应用场景
在海量数据的查询。(数据量不大,我们就可以使用关系型数据库代替)
日志数据分析
实时数据分析
ES和Mysql数据库
- Mysql有事务性,ElasticSearch没有事务性,所以你删了的数据是无法恢复的
- ElasticSearch没有物理外键这个特性。如果你的数据强以执行要求比较高。还是慎用
ES和Mysql分工不同:Mysql负责数据的存储,ES负责搜索数据
- 以前:数据访问小,数据存储在数据库中,搜索也通过数据库
- 现在:数据访问大,数据存储在数据库中,ES将数据同步。搜索功能走ES减轻数据库压力,功能还更加强大