某公司真题,ES的倒排索引是什么意思
在搜索引擎中,每个文档都要有一个文档id,文档内容相当就是一系列的关键词集合,文档就会经过分词,提取多个关键词,每个关键词就会都会记录他在文档中出现的次数以及文档出现的位置.
那么,倒排索引就是文档关键词到文档id的映射关系,每个关键词都会对应一系列的文档,这些文档都会存在这些关键词
有以下⽂档:
1 | ⾕歌地图之⽗跳槽 Facebook |
---|---|
2 | ⾕歌地图之⽗加盟 Facebook |
3 | ⾕歌地图创始⼈拉斯离开⾕歌加盟 Facebook |
4 | ⾕歌地图之⽗跳槽 Facebook 与 Wave 项⽬取消有关 |
5 | ⾕歌地图之⽗拉斯加盟社交⽹站 Facebook |
经过分词,得到倒排索引
WordId | Word | DocIds |
---|---|---|
1 | ⾕歌 | 1,2,3,4,5 |
2 | 地图 | 1,2,3,4,5 |
3 | 之⽗ | 1,2,4,5 |
4 | 跳槽 | 1,4 |
5 | 1,2,3,4,5 | |
6 | 加盟 | 2,3,5 |
7 | 创始⼈ | 3 |
8 | 拉斯 | 3,5 |
9 | 离开 | 3 |
10 | 与 | 4 |
ES分片和多副本是什么
ES存储数据的基本单位是index索引,而我们ES有几个重要的概念,index,tyep,mapping,document,field
我们可以简单的理解index是我们的数据库某一类别的表,type就是代表某一类表,mapping代表表的结构,document代表每一条数据,field代表字段
每一个索引,可以拆成多个shard即分片,每个分片存储部分数据,我们拆分成多个分片有两个好处
- 支持横向扩展,比如我们有3T的数据,有3个分片,每一个分片存储1T的数据
- 提高性能,多个分表,即多条服务器上,所有的操作都是多条机器上操作,提高吞吐量
然后为了高可用,我们分片又分为主分片 primary shard和副本replica shard,当我们写数据之后,会将数据同步到其他几个副本replica shard,
每个分片,都会有多个副本,然后当某个机器宕机之后,没有关系,我们还有其他副本在,
在es集群中有一个master节点,他是负责我们集群的元数据,负责切换primary shard和replica shard,如果是非master节点宕机,那么此节点上的primary shard就会丢失,而其他机器的replica shard就会成为新的primary shard,如果宕机的机器恢复了,丢失之后也不在是primary shard,而是replica shard