一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第23天,点击查看活动详情。
工作中我们有些情况会用到一些ES 相关的东西,这里就讲一下关于ES 基本的入门级别的概念的介绍,方便快速理解。
ES 的好处
-
可以提供分词功能
-
对于搜索出来的结果,ES 可以对某些词进行高亮操作
-
ES 提供快速查询的功能
ES 特点
-
ES 是Java 语言开发的,所以对Java 的工程有比较良好的支持。
-
ES 基于Lucene 开发的。(Lucene 是一个架构,叫做全文检索引擎,类似web 中的servlet,相比较ES 就像spring)
-
ES 基于Restful web 接口对外提供支持。
-
ES 对增量数据的实时搜索比较快。
ES 的几个基本需要掌握的概念
倒排索引
相关的概念就是正排索引,正排索引是根据key 去找value。我们一般数据库中存的都是完整的内容。也是使用这种模式去查找数据的。
对于倒排索引,是我们把数据导入到ES 中,然后经过ES 处理之后再进行搜索。在导入的过程中,ES 会对数据进行分词;查询的时候,使用数据的分词作为key,然后查找到对应的我们需要的数据。
总结来说,即:正排索引就是根据key 找value;倒排索引就是根据value 去找key,然后找到对应的value。
ES 与关系型数据库的对比
两种存储形势概念对比:
| 关系型数据库的概念 | ES 的概念 |
|---|---|
| database(数据库) | index(索引库) |
| table(表) | type(类型)(ES7 中已经作废) |
| row(行) | document(文档) |
| column(列) | field(字段) |
-
一个ES 集群包含多个索引(数据库),每个索引包含很多类型(es7 中已经作废),类型中包含很多文档(行),每个文档包含很多字段(列)。
-
传统db 是通过B+ tree 来加速检索;而ES 使用倒排索引(一种数据结构)来达到快速检索的目的。
-
倒排索引的概念其实源于生活中常见的场景:需要根据属性值来查找记录。简单来说就是这种索引表中的每一项都包括一个属性值,和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引。
-
作废type 的原因是为了提高搜索效率(举例来说,查找
province = LiaoNing,对于关系型数据库,要到各个表里去查询,然后将查到的数据进行汇总。相比于对于使用ES 的场景,就是需要到各个type(类型)中去查询,然后进行汇总。在使用过程中,开发人员认为这样比较麻烦,并总结出type 的存在好像没什么太大的作用,所以只允许有一张表。因为有一张表就不会出现重复字段了,所以再遇到相同条件的查询查数据就比较方便了。也可以说是,开发人员不想在多个type 中查找这个field,所以就废弃了type。
总结
以上是入门的时候需要理解并掌握的一些ES 的基本的知识,希望读者可以理解并记在脑海里。