赞
踩
目录
Elasticsearch的一个实例是一个节点,一组节点形成一个集群。Elasticsearch集群中的节点可以通过三种不同的方式进行配置:
(1)Master节点
Master节点控制Elasticsearch集群,并负责在集群范围内创建/删除索引,跟踪哪些节点是集群的一部分,并将分片分配给这些节点。
(2)Data节点
数据节点用来保存数据和倒排索引。
(3)Client节点
如果将node.master和node.data设置为false,则将节点配置为客户端节点,并充当负载平衡器,将传入的请求路由到集群中的不同节点。
若你连接的是作为客户端的节点,该节点称为协调节点(coordinating node)。协调节点将客户机请求路由到集群中对应分片所在的节点。对于读取请求,协调节点每次选择不同的分片来提供请求以平衡负载。
(4)存储模型
使用称为倒排索引的数据结构,用于提供低延迟搜索结果
注意:索引数据的操作只会发生在主分片(primary shard)上,而不会发生在分片副本(Replica) 上。如果索引数据的请求发送到的节点没有合适的分片或者分片是副本,那么请求会被转发到含有主分片的节点。
写入磁盘的倒排索引是不可变的,它有如下好处:
①不需要锁,提升并发能力,避免锁的问题
②数据不变,一直保存在os cache中,只要cache内存足够
③filter cache一直驻留在内存,因为数据不变
④可以压缩,节省cpu和io开销
坏处:
①每次都要重新构建整个索引
1)通过索引中的主分片数量进行取模运算,以确定文档应被索引到哪个分片。 shard = hash(document_id) % (num_of_primary_shards)
2)当节点接收到来自协调节点的请求时,请求被写入到translog,并将该文档添加到内存缓冲区。
如果请求在主分片上成功,则请求将并行发送到副本分片。只有在所有主分片和副本分片上的translog被fsync’ed后,客户端才会收到该请求成功的确认。
删除:每一个提交点包括一个.del文件,包含了段上已经被删除的文档当一个文档被删除,它是实际上只是在.del文件中被标记删除,亦然可以匹配查询,但最终返回之前会被从结果中删除。
更新:旧版本的文档被标记为删除,新版本的文档在新的段中索引
1)新收到的数据写入新的索引文件中,生成倒排索引叫做一个端--segment
2)使用一个commit文件记录索引内的所有segment
3)新数据进入内存buffer中
4)内存buffer生成一个新的segment,刷到文件系统缓存中,ES即可检测到新的segment
5)文件系统缓存真正同步到磁盘中,commit文件更新
防止丢失(主机错误、磁盘故障)。当ES把数据写入buffer中,还记录了translog日志
文档1 | 文档2 | 文档3 | 文档4 | 文档5 | 文档6 | |
单词1 | ✅ | ✅ | ||||
单词2 | ✅ | ✅ | ||||
单词3 | ✅ | ✅ | ||||
单词4 | ✅ | ✅ | ||||
单词5 | ✅ | |||||
单词6 | ✅ |
1)、单词词典(Lexicon):搜索引擎的通常索引单位是单词,单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向“倒排列表”的指针。
2)、倒排列表(PostingList):倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项(Posting)。根据倒排列表,即可获知哪些文档包含某个单词。
假设文档集合包含四个文档,对这个文档集合建立倒排索引。
文档编号 | 文档内容 |
1 | 谷歌地图之父跳槽Facebook |
2 | 谷歌地图之父加盟Facebook |
3 | 谷歌地图创始人拉斯离开谷歌加盟Facebook |
4 | 谷歌地图之父拉斯加盟社交网站Facebook |
1)、取得关键词—分词处理
没有实际意义的:“的”,“是”,“in”,“too”;
标点符号、空格;
统一大小写:“a”,“A”。还原单词 lives-->live
2)、建立索引列表
文章位置、出现的频率、出现的位置
3)、应用原因
时间复杂度--1秒
单词ID | 单词 | 文档频率 | 倒排列表(DocID:TF:<Position>) |
1 | 谷歌 | 4 | (1:1:<1>),(2:1:<1>),(3:2:<1><6>),(4:1:<1>) |
2 | 地图 | 4 | (1:1:<2>),(2:1:<2>),(3:1:<2>),(4:1:<2>) |
3 | 之父 | 3 | (1:1:<3>),(2:1:<3>),(4:1:<3>) |
4 | 跳槽 | 1 | (1:1:<4>) |
5 | | 4 | (1:1:<5>),(2:1:<5>),(3:1:<8>),(4:1:<8>) |
6 | 加盟 | 2 | (2:1:<4>),(4:1:<5>) |
7 | 创始人 | 1 | (3:1:<3>) |
8 | 拉斯 | 2 | (3:1:<4>),(4:1:<4>) |
9 | 离开 | 1 | (3;1:<5>) |
10 | 社交 | 1 | (4:1:<6>) |
11 | 网站 | 1 | (4:1:<7>) |
有了这个索引系统,搜索引擎可以很方便地响应用户的查询,比如用户输入查询词“Facebook”,搜索系统查找倒排索引,从中可以读出包含这个单词的文档,这些文档就是提供给用户的搜索结果,而利用单词频率信息、文档频率信息即可以对这些候选搜索结果进行排序,计算文档和查询的相似性,按照相似性得分由高到低排序输出,此即为搜索系统的部分内部流程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。