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

什么是ElasticSearch?

是一个 搜索 服务器软件!

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

  1. 效率低下
    • 首先 我们搜索,一般都是 模糊查询(例如:%手机) 我们都知道,涉及模糊查询,就会导致sql语句的索引失效,就直接导致全表扫描,性能极其低下。
  2. 功能低下
    • 我们搜索小米手机,在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博客搜索:标题关键字。以获取全部资料 ❤