【ELK】☞《这就是搜索引擎》

简介

想要学习elasticsearch,到底如何开始学习呢?我是看基础呢?还是看api使用方式呢?总感觉看完之后不用又忘记了,没有get到es的精髓,于是乎在“贵人”的指导下,看了《这就是搜索引擎》这本书。
在这里插入图片描述

倒排索引的基本概念

第三章 搜索引擎索引,进行一个简单的总结。
文档
文档集合
文档编号
单词编号
倒排索引
单词词典
倒排列表
倒排文件

单词词典

对单词词典进行高效的构建和查找,常用数据结构包括:哈希加链表和树形词典结构。
哈希加链表:查询请求为单词3,对这个单词进行哈希,定位到哈希表内的2号槽,从其保留的指针可以获得冲突链表,依次将单词3和冲突链表内的单词比较,发现单词3在冲突链表内,于是找到这个单词,之后可以读出这个单词对应的倒排列表来进行后续的工作,如果没有找到这个单词,说明文档集合内没有任何文档包含单词,则搜索结果为空。
在这里插入图片描述

树形词典:B树形成了层级查找结构,中间节点用于指出一定顺序范围的词典项目存储在哪个子树中,起到根据词典项比较大小进行导航的作用,最底层的叶子节点存储单词的地址信息,根据这个地址就可以提取出单词字符串。(就类似于我们要找某个单词B… 最顶层的假如是A,那么我们就可以很快地知道B是在左边还是右边)
在这里插入图片描述

倒排列表

用来记录有那些文档包含了某个单词,一般在文档集合里会有很多文档包含某个单词,每个文档会记录文档编号(DocID),单词在这个文档中出现的次数(TF)及单词在文档中那些位置出现过等信息,这样与一个文档相关的信息被称做倒排索引项(Posting),包含这个单词的一些列倒排索引项形成了列表结构,这就是某个单词对应的倒排列表。
在这里插入图片描述

建立索引

两遍文档遍历法 磁盘

在这里插入图片描述

排序法 内存

在这里插入图片描述

在这里插入图片描述

归并法

每次将内存中数据写入磁盘时,包括词典在内的所有中间结果信息都被写入磁盘,这样内存所有内容都可以被清空,后续建立索引可以使用全部的定额内存。
在这里插入图片描述

动态索引

实时反映索引变化,3 个关键的索引结构:倒排索引、临时索引和 已删除文档列表。
①倒排索引:就是对初始文档集合建立好的索引结构,一般单词词典存储在内存,对应的倒排列表存储在磁盘文件中。
②临时索引:是在内存中实时建立的倒排索引,其结构和前述的倒排索引是一样的,区别在于词典和倒排列表都在内存中存储。当有新文档进入系统时,实时解析文档并将其追加进这个临时索引结构中。
③已删除文档列表:则用来存储已被删除的文档的相应文档ID,形成一个文档 ID 列表。
在这里插入图片描述

索引更新策略

动态索引通过在内存中维护临时索引,可以实现对动态文档和实时搜索的支持。但是服务器内存总是有限的,随着新加入系统的文档越来越多,临时索引消耗的内存也会随之增加。当最初分配的内存将被使用完时,要考虑将临时索引的内容更新到磁盘索引中,以释放内存空间来容纳后续的新进文档,此时要考虑合理有效的索引更新策略。

完全重建策略

新文档临时索引+老文档,遍历生成新索引(废弃老索引),适合小文档集合

再合并策略

新文档索引+老索引,合并生成新索引(废弃老索引)

原地更新策略

增量索引+老索引,老索引+附加新倒排信息

混合策略

一般将单词进行分类,然后采用不同的更新策略

查询处理

一次一文档

先纵向再横向

一次一单词

先横向再纵向

跳跃指针

求交集 将一个倒排列表数据化整为零,切分为若干个固定大小的数据块,一个数据块作为一组,对于每个数据块,增加元信息来记录关于这个块的一些信息,这样即使是面对压缩后的倒排列表,在进行倒排列表合并的时候也能有两个好处:一个是无须解压所有倒排表项,只解压部分数据即可;另外一个好处是无须比较任意两个文档id,通过这两种方式有效节省了计算资源和存储资源。

多字段索引 实现多字段索引的方式

多索引方式

针对每个不同的字段,分表建立一个索引,当用户指定某个字段作为搜索范围时,可以从相应的索引里提取结果。效率低
在这里插入图片描述

倒排列表方式

为了能够支持对指定字段的搜索,也可以将字段信息存储在某个关键词对应的倒排列表内,在倒排列表中每个文档索引信息的末尾追加字段信息,这样在读出用户查询关键词的倒排列表的同时,就可以根据字段信息,判断这个关键词是否在某个字段出现,以此来进行过滤,并保留指定字段内出现过搜索词的文档作为结果返回。
在这里插入图片描述

扩展列表方式

是实际中应用比较多的支持多字段索引的方法。这个方法为每个字段建立一个列表,这个列表记载了每个文档这个字段对应的出现位置信息。

短语查询 支持短语查询的技术方法包括

位置信息索引

双索引

短语索引

混合方法

分布式索引

按文档划分

将整个集合切割成若干子集合,而每台机器负责对某个文档子集合建立索引,并响应查询请求。

按单词划分

对单词词典进行划分,每个索引服务器负责词典中部分单词的倒排列表的建立和维护。

索引压缩

词典压缩

倒排列表压缩算法 (有损 无损)

  1. 评价索引压缩算法的指标
  2. 一元编码与二进制编码:不论具体压缩算法如何,最终都要落实到这两种方法上。
  3. Elias Gamma算法与Elias Delta算法
  4. Golomb算法与Rice算法
  5. 变长字节算法
  6. SimpleX系列算法
  7. PForDelta算法

文档编号重排序

通过文档聚类并重排文档ID编号来获得较高的索引压缩率。

静态索引裁剪

有损压缩
1.以单词为中心的索引裁剪:在建好的倒排索引基础上对索引项进行删除。
2.以文档为中心的索引裁剪:是在建立索引之前进行的数据预处理措施。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值