索引(index)
索引对应于关系型数据库中的数据库(database)的概念,是文档(doc)的集合。
分片
每个索引可以有多个分片,这样存储在索引中的所有数据会被分散到这多个分片上。对外部的用户来说,我们只需要跟索引进行交互而无需关心数据会存储到哪个分片上,而分片是索引内部的概念,索引的所有数据会分布在这多个分片上。
副本
索引的每个分片都可以有多个副本,是出于容错性的考虑。假设某个es节点宕机,则其他节点上该索引的分片的副本则可以提供服务响应数据。
类型(type)
Es中的类型对应于关系型数据库中的表的概念,即相当于约束了数据中有哪些字段,字段的数据类型是什么。类似关系型数据库如下的形式:
字段(field)
字段相当于关系型数据库表结构中的列的概念
映射(mapping)
ES中Type的映射关系相当于关系型数据库中某个列和该列的类型关系的映射关系。
文档
ES中文档相当于关系型数据库中表中的一行行数据,不同之处在于ES中文档是存在于索引(index)中的,相同之处在于都以一行一行的形式来展示数据库中存储的数据。
倒排索引
- 讲倒排索引之前先要了解正排索引,ES是一个面向文档的数据库,所以正排索引值的就是给你一个关键词,数据库通过 文档id → 文档 这种形式遍历所有文档找出包含某个关键词的文档。
- 而倒排索引则是通过 文档关键词 → 文档id 这种形式来找出包含某个关键词的文档,而要想获得文档中的所有关键词则需要分词器的帮助,这里举个例子帮助一下理解:
- Doc1:乔布斯去了中国。
- Doc2:苹果今年仍能占据大多数触摸屏产能。
- Doc3:苹果公司首席执行官史蒂夫·乔布斯宣布,iPad2将于3月11日在美国上市。
- Doc4:乔布斯推动了世界,iPhone、iPad、iPad2,一款一款接连不断。
- Doc5:乔布斯吃了一个苹果。
这五个文档中的数字代表文档的ID,比如"Doc1"中的“1”,通过这5个文档产生的倒排索引如下所示:
单词ID(WordID) | 单词(Word) | 倒排列表(DocID) |
---|---|---|
1 | 乔布斯 | 1,3,4,5 |
2 | 苹果 | 2,3,5 |
3 | iPad | 2 3,4 |
4 | 宣布 | 3 |
5 | 了 | 1,4,5 |
… | … | … |
这部分例子参考自博客:https://blog.csdn.net/qq_43403025/article/details/114779166