ES 官网:https://www.elastic.co/cn/elasticsearch/
什么是ElasticSearch?
是一个 搜索 服务器软件!
Mysql也可也Select,为什么 不选MySQL作为主 搜索服务器?
- 效率低下
- 首先 我们搜索,一般都是 模糊查询(例如:%手机) 我们都知道,涉及模糊查询,就会导致sql语句的索引失效,就直接导致全表扫描,性能极其低下。
- 功能低下
- 我们搜索小米手机,在MySQL的sql为 select * from 表 where title like "%小米手机%"; 其结果 只会包含 "小米手机"相关信息。但是在电商平台,我们会遇到搜索“小米手机”,在关键词产品完全匹配的结果之后,就可能会出现 包含 "小米"或"手机" 关键词的商品,大大提高一些商品的曝光度(例如:小米风扇、手机壳),提高服务器的性能。
为什么要使用这个ElasticSearch搜索服务器?
ElasticSearch 比Mysql 额外拥有 倒排索引(反向索引)
什么是倒排索引?
正向索引:将一段文本内容,与其唯一标识,做了一一对应的关系。
例如
唯一标识 | 文本内容 |
《静夜思》 | 窗前明月光,疑是地... |
《水调歌头》 | 明月几时有?把酒... |
《离骚》 | 帝高阳之苗裔兮,朕皇考曰伯庸... |
倒排索引:将一段文本,按照一定的规则,拆分成不同的词条(term),记录数据与词条的唯一标识(id)的对应关系,形成的产物
例如(我这里随便举例子)
唯一标识 | 文本内容 |
窗 | 《静月思》 |
明月 | 《静夜思》,《水调歌头》 |
伯庸 | 《离骚》 |
将来用 "明月" 作为关键字 进行查询,直接抛出《静夜思》,《水调歌头》,大大加快查询速度。
ES 数据的存储原理与搜索原理
- 存储原理(分词后以Json形式存储)
案例:一个故事网站使用ES:将录入的所有诗歌进行分词。(生成倒排索引的时候,词条会被排序,形成树结构,提升词条的查询速度)
- 搜索原理
关于解决Mysql查询功能低下问题: 我们在使用 "月光" 查询的时候,ES 会自动进行分词 "月"、"光"、"月光"。然后 可以选择 分词的并集、交集 返回。
ElasticSearch概念
- 是一个基于lucene的搜索服务器(建议去百度一下Lucene API)。
- 是一个分布式、高拓展、高实时性的搜索与数据分析引擎。
- 基于Resuful web接口
- 基于Java语言开发,开源。
应用场景
- 搜索,海量的数据
- 日志数据分析(ELK)
- 实时数据分析
MySQL与ElaticSearch的不同
- mysql是由事务的,ES没有
- ES没有外键特性,要求数据强一致性慎用
架构变化
总结:ES 是用来增强查询等的功能的。MySQL还是核心数据源。一旦MySQL变化,ES 中的数据也必须相应跟着变化。
ElasticSearch 核心概念
索引(index):ES存储数据的地方,可以理解成 关系型数据库中的 数据库概念
映射(mapping):定义了每个字段的类型、字段所使用的分词器。相当于 表结构的概念 ,起到约束作用
文档(document):ES存储的最小单元,常以json格式显示。相当于 记录 概念
倒排索引:一个倒排索引有文档中的不重复的词列表构成。每一个词,都有一个包含他的文档 id 列表
(ES7前有)类型(type):理解成表的概念,一个类型就是一个表,一个用户表,一个角色表等等。ES7 默认 type是 _doc
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
评论(0)