乐趣区

关于lucene:lucene里的segment

这章来记录一下 lucene 里的 segment。segment 是索引中最小的独立存储单元。一个索引文件由一个或多个段组成。segment 外部次要有:

  • Inverted Index
  • Sorted Fields
  • Document Values
  • Cache

Inverted Index
最为重要,它次要包含两局部:

  • 一个有序的数据字典(包含单词 Term 和它呈现的频率)
  • 与单词 Term 对应的 Postings(即倒排表,存单词的文件)

当咱们搜寻时,首先将搜寻的内容合成,而后在字典里找到对应的 Term,从而查找到与搜寻相干的文件内容。

依据上图内容,举几个查问例子。

  1. 查问 ’the fury’

    还记得上一章介绍的 lucene 四种检索里的‘AND’形式吗?Lucene 基本知识
  2. 主动补全 (AutoCompletion-Prefix)
    如果想查找字母‘c‘结尾的单词,可能简略通过二分查找在 Inverted Index 表中找到例如 ’choice’,’coming’ 这样的词(Term)
  3. 低廉的查找
    如果想要查找所有蕴含 ’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
  4. 解决拼写错误
    一个 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 原理的初步认知

退出移动版