1.简介
elasticsearch是一个基于lucene构建的开源分布式搜索引擎,作为elastic stack的核心,其还可以用于数据存储以及数据分析。​​​7.5版本的官方文档链接​​。

2.Index(索引)
(1).简介
index是存储具有相同数据结构的文档。

(2).特性

  • 一个index被唯一的小写字母名称标记
  • 每个索引都有自己的mapping定义,用于定义字段和类型
  • 一个集群可以建立多个index

3.Type(类型)
(1).简介
在一个Index中,可以定义多个type,同一个type中的数据会有相同的数据结构。type相当于关系型数据库中的表。

(2).特性
在elaticsearch6.x版本中,一个索引只有一个type,声明多个type会被标记为过期,但却仍可以使用,而elaticsearch在7.0之后的版本会完全移除这一特性。

4.Document(文档)
(1).简介
一个document是可以被索引的基本单元,通常document都是json形式的数据。document相当于关系型数据库中的记录。

(2).数据类型
一个document是由一个或多个字段组成的json对象。

(3).文档ID
每个文档都有唯一的id标识,类似于mysql中的主键。在插入数据时可以指定id,也可以不指定由elasticsearch自动生成。

(4).元数据
document中标注文档相关信息的数据称之为元数据。

  • _index:文档所在的索引名
  • _type:文档所在的类型名
  • _id:文档唯一id
  • _source:文档的原始json数据
  • _all:整合所有字段内容到该字段,默认禁用(会对所有字段内容进行分词,占磁盘空间但效果并不好)
  • _version:文档有变化的操作(新增、修改和删除)都会更新_version值,存在的意义相当于锁的机制,如果并行修改文档数据时,当更新操作的_version值小于当前文档的_version值时,此次的更新操作便是非法的

5.倒排索引
(1).简介
拿高性能mysql这本书举例,书中包括目录页(页码和章节标题)和内容页(页码和具体内容),目录页的作用是按照页码顺序介绍本书的核心知识点(即可以根据页码找到对应的内容),那么目录页便可以理解为正排索引。
本书的最后提供了一个索引的功能,列出了关键词所出现的页码,即可以根据关键词查找其所对应的页码,那么索引页便可以理解为倒排索引。
正排索引显示了文档id到文档内容、单词的关联关系,而倒排索引显示了文档内容、单词到文档id的关联关系。

(2).正排索引和倒排索引案例
正排索引:文档id到文档内容、单词的关联关系。

文档id

文档内容、单词

1

elasticsearch是最流行的搜索引擎

2

php是世界上最好的语言

3

搜索引擎是如何诞生的

倒排索引:文档内容、单词到文档id的关联关系。将文档内容进行分词,找到单词出现的文档id存入文档id列表。

文档内容、单词

文档id列表

elasticsearch

1

流行

1

搜索

1、3

引擎

1、3

搜索引擎

1、3

php

2

世界

2

最好

2

语言

2

如何

3

诞生

3

(3).倒排索引组成

  • 单词词典
    单词词典是倒排索引的重要组成部分,主要特性如下。
  • 文档单词的集合(一般比较大)
  • 记录单词到倒排列表的关联关系
  • 单词词典底层是通过b+树的数据结构来保障高效的查询效率的
  • 倒排列表
    倒排列表记录了单词对应的文档集合,由倒排索引项组成,倒排索引项主要包括以下信息。
  • 文档id:用于获取原始信息
  • 单词频率:记录单词在该文档中出现的次数,用于后续相关性算分
  • 位置:记录单词在文档中的分词位置(可以是多个),用于做单词搜索
  • 偏移:记录单词在文档中的起始位置,用于做高亮显示

(4).倒排索引项组成案例
以“搜索引擎”为例,阐述倒排索引项的构成。

文档id

文档内容、单词

1

elasticsearch是最流行的搜索引擎

2

php是世界上最好的语言

3

搜索引擎是如何诞生的

假如文档1的内容被分词为elasticsearch、流行和搜索引擎三个单词,文档2的内容被分词为搜索引擎、如何和诞生三个单词,那么倒排索引项的构成如下(位置从0开始计数)。

文档id

词频

位置

偏移量

1

1

2

<18,22>

3

1

0

<0,4>

(5).倒排索引搜索流程

1.1 ElasticSearch概述之基本概念_elasticsearch

  1. 搜索关键词时通过单词词典快速定位到其位置,通过倒排索引项获得搜索关键词所对应的文档id
  2. 通过正排索引查询文档id对应的完整内容
  3. 返回用户最终结果

这里为了文字排版,只列出了倒排索引项的单词位置,文档id、词频和偏移量未列出。

(6).ElasticSearch文档存储格式
elasticsearch的文档是以json格式存储的,json包含多个字段,那么elasticsearch会为每个字段建立一个倒排索引。