ES索引基本概念:

以ES7.X为参考
ES的索引(名词)可以看做的sql类型数据的数据库
ES的文档可以看做的sql类型数据的表
ES的字段可以看做的sql类型数据的列
**

  • 什么是索引

索引是逻辑空间的概念,是文档的容器是一类文档的结合
每个索引都有自己的mapping(映射)定义,用于定义文档的字段和字段类型

  • 什么是文档

Elasticsearch 是面向文档,文档就是类似数据库里面的一条长长的存储记录,是索引信息的基本单位,是所有搜索数据的最小单元,
每个文档都会有一个 Unique ID,其字段名称为 _id

image.png
ES和sql类型数据库的类比示意图

  • ES和sql类型数据库的区别

es:高性能的全文检索
sql类型:事务性

PS: 7.x以前 每个索引可以有多个 类型 ,7.x开始 类型 被弃用,一个索引只能创建一个 type,值为 _doc
更多信息参考链接


ES实现快速搜索原理:
一切设计都是为了提高搜索的性能,所以会牺牲某些其他方面,比如插入/更新,因此ES采用了**倒排索引**的方式提升性能。
**

举个例子 :当用户在主页上搜索关键词“华为手机”时,假设只存在正向索引,那么就需要扫描索引库中的所有文档,找出所有包含关键词“华为手机”的文档,再根据打分模型进行打分,排出名次后呈现给用户。因为互联网上收录在搜索引擎中的文档的数目是个天文数字,这样的索引结构根本无法满足实时返回排名结果的要求。
**

  • 正排索引

文档1 的ID > 单词1:出现次数,出现位置列表;单词2:出现次数,出现位置列表;…………。
文档2 的ID > 此文档出现的关键词列表。
image.png
正排索引示意图
**

所以,搜索引擎会将正向索引重新构建为倒排索引,即把文件ID对应到关键词的映射转换为关键词到文件ID 的映射,每个关键词都对应着一系列的文件,这些文件中都出现这个关键词。

  • 倒排索引

关键词1:“文档1”的ID,“文档2”的ID,…………。
关键词2:带有此关键词的文档ID列表。
image.png
倒排索引示意图