1 概述

这是基于开源的sphinx全文检索引擎的架构代码分析,本篇主要描述index索引服务的分析。当前分析的版本 sphinx-2.0.4

2 index 功能

3 文件表

4 索引文件结构

4.1 spa 文件

存储文档属性,在extern文档信息存储模式下使用。

spa文件格式 => 属性值存储
item item item item item
docid attr0 attr1 attr mva(spm file position)
spa文件格式 => 在文件的末尾存储每个属性的最大最小值
item item item item item item item
attr0 min attr1 min attr0 max attr1 max attr mva max

4.2 spi 文件

存储词列表,词id和指向spd文件的指针。

  • wordid 采用crc32编码
  • 每64个word插入一个检查点,重新开始存储wordid和spd文件偏移的差值
  • 保存doc的计数值,hit的计数值
spi文件格式 => 倒排索引存储
item item item item
wordid(crc32)或vlb spd文件偏移的差值 doc的计数值 hit的计数值
spi文件格式 => 文件的末尾存储文件内的检查点信息
item item item
checkpoint1 sWord len sWord 在文件内的 offset

4.3 spd 文件

存储每个词id可匹配的文档id列表。

文件格式 => 只有一次命中的时候
item item item item
docid vlb hit count hit field hit position
文件格式 => 多次命中的时候
item item item item
docid vlb hit count field mask hit file(spp) position 差值

4.4 sph 文件

存储索引头信息。

格式0
item0 item1 item2 item3 item4
version bits docinfo mode schema min doc
格式1
item5 item6 item7 item8 item 9
ckpoint pos ckpoint count total doc total bytes index setting
格式2
item10 item 11 item12 item13
tokenizer dictionary kill list min max index

4.5 spk 文件

存储kill-lists信息。

4.6 spm 文件

存储mva数据

  • 分块存储
  • 多路归并排序,创建spm文件
spm文件格式
item item item
docid A a0,a1,a2 … B b0,b1,b2 …

4.7 sps 文件

存储字符串属性

4.8 spp 文件

4.8.1 第一次扫描创建的命中文件(临时存储命中信息)

存储每个词的命中数。

  • 文件内分块存储
  • 块内同类递增排序,优先级为 wordid > docid > hitpos
  • 在wordid,docid相等的条件下,hitpos差分存储
  • 在wordid相等的条件下docid差分存储
  • wordid差分存储
hit block 的存储结构列表如下
item item item item item
wordid0 docid0 pos0, pos1, pos2 … hitcount field mask
  docid1 pos0, pos1, pos2 … hitcount field mask
  docid2 pos0, pos1, pos2 … hitcount field mask
wordid1 docid0 pos0, pos1, pos2 … hitcount field mask
  docid1 pos0, pos1, pos2 … hitcount field mask

4.8.2 最终创建的spp文件格式

当doc切换后存储的第一个是hit position, 后面存储的是差值。

spp文件存储格式
item
hit position 差值

4.9 sps 文件

存储字符串属性数据。

sphinx索引分析——文件格式和字典是double array trie 检索树,索引存储 – 多路归并排序,文档id压缩 – Variable Byte Coding的更多相关文章

  1. 双数组字典树(Double Array Trie)

    参考文献 1.双数组字典树(DATrie)详解及实现 2.小白详解Trie树 3.论文<基于双数组Trie树算法的字典改进和实现> DAT的基本内容介绍这里就不展开说了,从Trie过来的同 ...

  2. sphinx 源码阅读之分词,压缩索引,倒排——单词对应的文档ID列表本质和lucene无异 也是外部排序再压缩 解压的时候需要全部扫描doc_ids列表偏移量相加获得最终的文档ID

    转自:http://github.tiankonguse.com/blog/2014/12/03/sphinx-token-inverted-sort.html 外部排序 现在我们的背景是有16个已经 ...

  3. double array trie 插入结点总结

    双数组Trie树索引的可操作性研究.pdf 提示:任一状态点的移动,会影响其Trie树中父节点的base值的选择以及兄弟结点位置的变动,而兄弟结点的移动又须变更相应的子节点的check值. 设待插入的 ...

  4. Double Array Trie 的Python实现

    不多介绍,可自行Google,或者其它关键词: "datrie" 放代码链接: double_array_trie.py 因为也是一段学习代码,参考的文章都记在里面了,主要参考gi ...

  5. Elasticsearch压缩索引——lucene倒排索引本质是列存储+使用嵌套文档可以大幅度提高压缩率

    注意:由于是重复数据,词法不具有通用性!文章价值不大! 摘自:https://segmentfault.com/a/1190000002695169 Doc Values 会压缩存储重复的内容. 给定 ...

  6. ES里设置索引中倒排列表仅仅存文档ID——采用docs存储后可以降低pos文件和cfs文件大小

    index_options The index_options parameter controls what information is added to the inverted index, ...

  7. Poseidon 系统是一个日志搜索平台——认证看链接ppt,本质是索引的倒排列表和原始日志数据都存在HDFS,而文档和倒排的元数据都在NOSQL里,同时针对单个filed都使用了独立索引,使用MR来索引和搜索

    Poseidon 系统是一个日志搜索平台,可以在百万亿条.100PB 大小的日志数据中快速分析和检索.360 公司是一个安全公司,在追踪 APT(高级持续威胁)事件,经常需要在海量的历史日志数据中检索 ...

  8. sphinx索引分析续

    4.10 同义词文件/Synonym 同义词文件格式 from => to AT &T => AT&T AT & T => AT & T standa ...

  9. Elasticsearch的索引模块(正排索引、倒排索引、索引分析模块Analyzer、索引和搜索、停用词、中文分词器)

    正向索引的结构如下: “文档1”的ID > 单词1:出现次数,出现位置列表:单词2:出现次数,出现位置列表:…………. “文档2”的ID > 此文档出现的关键词列表. 一般是通过key,去 ...

随机推荐

  1. knockoutjs入门

    Knockoutjs入门 (概念相关)对于asp.net 后端开发人员来说我们几乎都接触过mvc框架.knockoutjs是MVVM模式对于我们来说有点陌生.Knockout是一个轻量级的UI类库,通 ...

  2. linq+映射数据库调用方法

      关于这一块.我在网上了解了很多.但是都没有找到自己想要的.通过各方面了解在linq 中调用映射的数据库函数以及存储过程方法如下. 1.传递对象参数//*注意:参数必须和你函数或者存储过程的参数一样 ...

  3. jquery on和bind

    1:bind():为每个匹配元素的特定事件绑定事件处理函数. bind(type,[data],fn) type: 含有一个或多个事件类型的字符串,由空格分隔多个事件. 比如"click&q ...

  4. Oracle数据库基础

    Oracle基础知识 Oracle的主要特点 1.支持多用户.大事务量的事务处理 2.在保持数据安全性和完整性方面性能的优越 3.支持分布式数据处理.将分布在不同物理位置的数据库用通信网络连接起来,在 ...

  5. UMLl类图实例

    下面是类图的实例(好像大话设计中有): UML中类图实例 接口:空心圆+直线(唐老鸭类实现了‘讲人话’):依赖:虚线+箭头(动物和空气的关系):关联:实线+箭头(企鹅需要知道气候才迁移):聚合:空心四 ...

  6. python json操作

    来源 http://www.cnblogs.com/qq78292959/p/3467937.html 什么是json: JSON(JavaScript Object Notation) 是一种轻量级 ...

  7. 获得本机IP,并且将ip放在CIpAdress里

    char szHostName[MAX_PATH + 1]; gethostname(szHostName, MAX_PATH); //得到计算机名 hostent *p = gethostbynam ...

  8. REVERSE

    REVERSE函数,刚刚接触,这是一个Oracle和MS Sql都能用的,不知道是不是T-SQL标准的函数,反正能用,挺好 SELECT REVERSE('abcd') 结果为dcba,就是把字符串反 ...

  9. linux开发摘要

    1.linux内核文档链接点击打开链接 2.配置文件 在out\target\product\project\obj\KERNEL_OBJ\.config中可以看到 # CONFIG_MTD_LPDD ...

  10. laravel的配置文件

    app/config 中的配置说明   1 在 app/config 文件夹中经常配置的一般有两个文件:app.php 和 database.php 两个文件,他们一个是配置项目杂项的.一个是配置数据 ...