1 初识ElasticSearch

2022-01-14 09:34:22 浏览数 (1)

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

特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。 万物皆入轮回,谁也躲不掉! 以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!

0 人点赞