共计 1085 个字符,预计需要花费 3 分钟才能阅读完成。
这章来记录一下 lucene 里的 segment。segment 是索引中最小的独立存储单元。一个索引文件由一个或多个段组成。segment 外部次要有:
- Inverted Index
- Sorted Fields
- Document Values
- Cache
Inverted Index
最为重要,它次要包含两局部:
- 一个有序的数据字典(包含单词 Term 和它呈现的频率)
- 与单词 Term 对应的 Postings(即倒排表,存单词的文件)
当咱们搜寻时,首先将搜寻的内容合成,而后在字典里找到对应的 Term,从而查找到与搜寻相干的文件内容。
依据上图内容,举几个查问例子。
- 查问 ’the fury’
还记得上一章介绍的 lucene 四种检索里的‘AND’形式吗?Lucene 基本知识 - 主动补全 (AutoCompletion-Prefix)
如果想查找字母‘c‘结尾的单词,可能简略通过二分查找在 Inverted Index 表中找到例如 ’choice’,’coming’ 这样的词(Term) - 低廉的查找
如果想要查找所有蕴含 ’our’ 字母的单词,那么零碎会扫描整个 Inverted Index,这是十分低廉的。
在此状况下,如果想要做优化,那么咱们面对的问题是如何生成适合的 Term。个别有上面这些计划:
1) suffix -> xiffus ,如果咱们想当前缀作为搜寻条件,能够为 Term 做反向解决
2) (60.6384, 6.5017) -> u4u8gyykk
对于 GEO 地位信息,能够将它转换成 GEO Hash
3) 123 -> {1-hundreds, 12-tens, 123}
对于简略的数字,能够为它生成多重模式的 Term - 解决拼写错误
一个 python 库为单词生成了一个蕴含谬误拼写信息的树形状态机,解决拼写错误的问题。
Stored Field 字段查找 (待具体补充)
当咱们想要查找蕴含某个特定题目内容的文件时,Inverted Index 就不能很好的解决这个问题,所以 lucene 提供了另外一种数据结构 Stored Fields 来应答这个问题,实质上,Stored Fields 是一个简略的键值对 key-value。默认状况下,ES 会存储整个文件的 JSON source.
Document Values 为了排序,聚合 (待具体补充)
Document values 是为了解决排序,聚合,facet 问题的,DV 构造实质上是一个列式的存储,它高度优化了具备雷同类型的数据的存储构造。
为了提高效率,ES 能够将索引下某一个 Document Value 全副读取到内存中进行操作,这大大晋升访问速度,然而也会耗费大量的内存空间。
参考文章:ES 详解 – 原理:从图解构筑对 ES 原理的初步认知
正文完