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. [课程设计]Scrum 3.5 多鱼点餐系统开发进度(修复Bug&美化页面)

    Scrum 3.5 多鱼点餐系统开发进度(修复Bug&美化页面) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅 ...

  2. AngularJS中使用$resource

    这个服务可以创建一个资源对象,我们可以用它非常方便地同支持RESTful的服务端数据源进行交互,当同支持RESTful的数据模型一起工作时,它就派上用场了.      REST是Representat ...

  3. Git使用指南(1)——Git配置命令

    配置用户信息 git config --global user.name bongxin git config --global user.email bongxin@yeah.net 配置文本编辑器 ...

  4. android dialog

    /** * @Title MenuTest.java * @package com.example.standardview * @since * @version 1.0.0 * @author V ...

  5. ORACLE常用SQL优化hint语句

    在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量, ...

  6. EF CodeFirst 关系配置

    自从开始学习asp.net mvc采用code first以来,关系配置就没有搞清楚过!(⊙﹏⊙)b 笔记之前先感谢以下文章和博主,对他们表示崇拜,由浅入深.举例恰当.拨云见日.茅塞顿开,还有什么词, ...

  7. destoon系统中get_maincat的用法及解释

    get_maincat函数的用法, 如get_maincat(0, $mid, 1),其中第一.二.三个参数分别表示什么? 第一个参数代表parentid 第二个参数代表所有的分类 第三个参数 代表 ...

  8. 【转载】动态新增svg节点

    原文地址:http://blog.csdn.net/tomatomas/article/details/50442497 原文作者:番茄大圣 创建svg节点时,要使用createElementNS函数 ...

  9. 原创:Equinox OSGi应用嵌入Jersey框架搭建REST服务

    一.环境 eclipse版本:eclipse-luna 4.4 jre版本:1.8 二.Equinox OSGi应用嵌入Jersey框架搭建REST服务 1.新建插件工程HelloWebOSGI a. ...

  10. IaaS/PaaS/SaaS

    如果你是一个网站站长,想要建立一个网站.不采用云服务,你所需要的投入大概是:买服务器,安装服务器软件,编写网站程序.现在你追随潮流,采用流行的云计算,如果你采用IaaS服务,那么意味着你就不用自己买服 ...