ES 官网:https://www.elastic.co/cn/elasticsearch/

什么是ElasticSearch?

是一个 搜索 服务器!

Mysql也可也Select,为什么 不选Mysql 作为主 搜索服务器?

  • 效率低下

首先 我们搜索,一般都是 模糊查询,我们都知道,涉及模糊查询,就会导致索引失效,就直接导致全表扫描,性能低下。

  • 功能低下

我们搜索小米手机,在Mysql的sql为 select * from 表 where title like “%小米手机%”; 其结果 只会包含 小米手机相关信息,但是在电商平台,我们会遇到搜索全部小米手机,在后面的分页结果中,就可能会出现 包含 小米、手机的商品,大大提高商品的曝光度。

为什么要使用这个ElasticSearch搜索服务器?

ElasticSearch 拥有 倒排索引(反向索引)

什么是倒排索引?

正向索引:将一段文本内容,与其唯一标识,做了一一对应的关系。

例如

唯一标识文本内容
《静夜思》窗前明月光,疑是地…
《水调歌头》明月几时有?把酒…
《离骚》帝高阳之苗裔兮,朕皇考曰伯庸…

倒排索引:将一段文本,按照一定的规则,拆分成不同的词条(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

还是那句话,你只看到了大佬轻松解决问题的光鲜,却不记得当初人家死磕Bug的痛苦。

万物皆入轮回,谁也躲不掉!

以上文章,均是我实际体验,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,支持下原创,请勿直接盗用,有条件的可以开通个会员支持下,谢谢!!!

Java Code Study » 1 初识ElasticSearch

招聘、单纯问问题,都可以联系我

加我QQ 公司缺人,拉我入伙